{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Use PY in Calculus\n",
    "\n",
    "\n",
    "## What is Function\n",
    "\n",
    "我們可以將函數（functions）看作一台機器，當我們向這台機器輸入「x」時，它將輸出「f(x)」\n",
    "\n",
    "這台機器所能接受的所有輸入的集合被稱為定義域（domian），其所有可能的輸出的集合被稱為值域（range）。函數的定義域和值域都十分重要，當我們知道一個函數的定義域，就不會將不合適的`x`扔給這個函數；知道了定義域就可以判斷一個值是否可能是這個函數所輸出的。\n",
    "\n",
    "### 多項式（polynomials）：\n",
    "$f(x) = x^3 - 5^2 +9$\n",
    "因為這是個三次函數，當 $x\\rightarrow \\infty$ 時，$f(x) \\rightarrow -\\infty$，當 $x\\rightarrow \\infty$ 時，$f(x) \\rightarrow \\infty$ 因此，這個函數的定義域和值域都屬於實數集$R$。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5 -3\n"
     ]
    }
   ],
   "source": [
    "def f(x):\n",
    "    return x**3 - 5*x**2 + 9\n",
    "\n",
    "print(f(1), f(2))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通常，我們會繪製函數圖像來幫助我們來理解函數的變化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x6f6a6270>]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6f8741b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "x = np.linspace(-10,10,num = 1000)\n",
    "y = f(x) \n",
    "plt.plot(x,y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 指數函數（Exponential Functions）\n",
    "$exp(x) = e^x$\n",
    "domain is $（-\\infty,\\infty)$,range is $(0,\\infty)$。在 py 中，我們可以利用歐拉常數 $e$ 定義指數函數："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "exp(2) = e^2 =  7.3890560989306495\n"
     ]
    }
   ],
   "source": [
    "def exp(x):\n",
    "    return np.e**x\n",
    "\n",
    "print(\"exp(2) = e^2 = \",exp(2))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "或者可以使用 `numpy` 自帶的指數函數：`np.e**x`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "exp(2) = e^2 =  7.3890560989306495\n"
     ]
    }
   ],
   "source": [
    "def eexp(x):\n",
    "    return np.e**(x)\n",
    "\n",
    "print(\"exp(2) = e^2 = \",eexp(2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1137944a8>]"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1136a1320>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x,exp(x))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "當然，數學課就會講的更加深入$e^x$的定義式應該長成這樣：$\\begin{align*}\\sum_{k=0}^{\\infty}\\frac{x^k}{k!}\\end{align*}$ 至於為什麼他會長成這樣，會在後面提及。\n",
    "這個式子應該怎麼在`python`中實現呢?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "exp(2) = e^2 =  7.389056098930649\n"
     ]
    }
   ],
   "source": [
    "def eeexp(x):\n",
    "    sum = 0\n",
    "    for k in range(100):\n",
    "        sum += float(x**k)/np.math.factorial(k)\n",
    "    return sum\n",
    "\n",
    "print(\"exp(2) = e^2 = \",eeexp(2))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 對數函數（Logarithmic Function）\n",
    "$log_e(x) = ln(x)$\n",
    "*高中教的 $ln(x)$ 在大學和以後的生活中經常會被寫成 $log(x)$*\n",
    "對數函數其實就是指數函數的反函數，即，定義域為$(0,\\infty)$，值域為$(-\\infty,\\infty)$。\n",
    "`numpy` 為我們提供了以$2，e，10$ 為底數的對數函數："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1138561d0>,\n",
       " <matplotlib.lines.Line2D at 0x1138567f0>,\n",
       " <matplotlib.lines.Line2D at 0x113856ba8>]"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJzt3XeYlNX5xvHvAyJFQFGw0VXUGLCu2ImCiIWIURSMDTRijSWWIPau0ZBYUEQlBmJEREUsqHREozRBQMAYioBIkyp1d8/vj2f2t4WFXZaZeafcn+t6r5mdeXfmYdm99+x5T7EQAiIiklkqRV2AiIjEn8JdRCQDKdxFRDKQwl1EJAMp3EVEMpDCXUQkAyncRUQykMJdRCQDKdxFRDLQLlG9cd26dUOTJk2iensRkbQ0adKk5SGEemWdF1m4N2nShIkTJ0b19iIiacnM5pfnPHXLiIhkIIW7iEgGUriLiGQghbuISAZSuIuIZCCFu4hIBlK4i4hkoMjGuYuIZJW8PPj6axg5Eo45Btq0SejbKdxFRBIhPx+mT4dRozzQx4yB1av9ue7dFe4iImkhBJgzB4YPhxEjPNSXL/fnDjwQLroITjvNj333TXg5CncRkYpavtxb5cOGeajPm+eP168PZ59dGOaNGye9NIW7iEh5bdgA48YVhvnXX/vjtWtD69Zw++1w+ulw8MFgFmmpCncRkW3Jy4PJkz3Ihw+Hzz+HTZugShU48UR4+GEP85wc2CW14jS1qhERidr//lfYMh85Elau9McPPxxuuMHDvFUr2G23aOssg8JdRLLbunUwejR8/LEf//ufP96gAZx3nod5mzawzz6RlrmjFO4ikl1C8CGKn3ziYf7ZZ7B5M9So4Rc/b74Z2rWDZs0i7zffGQp3Ecl8K1d6N0tB6/zHH/3x5s3hppvgzDPh5JOhatVo64wjhbuIZJ68PJg0qbB1/uWXPqlojz2gbVtvmbdr510vGUrhLiKZ4eefPcg//NBDfcUK71bJyYG77/bWecuWKTeqJVGy418pIpknBJgxw8P8gw/giy+8dV6vnk8gOussb6XXrRt1pZFQuItI+ti40af1f/CBh/r82F7RRx0FPXpA+/Zw7LFQSQveKtxFJLUtWlTYOh8xAtav95Etp5/u3S1nn+3T/aUYhbuIpJb8fJgwwcP8gw9gyhR/vHFj6NrVW+enngrVqkVaZqpTuItI9DZt8u6WwYNhyBBYvNi7Vk46CZ54wgP9sMPSetx5spUZ7mZWDRgLVI2dPyiEcH+Jc6oC/YBjgBVApxDCvLhXKyKZY9UqGDrUA33oUFi71qf0n3mmzww9+2zYc8+oq0xb5Wm5bwJahxDWmVkVYJyZDQ0hfFnknKuAlSGEg8ysM/Ak0CkB9YpIOlu40Fvmgwd7Sz03F/beGzp18kBv00bdLXFSZriHEAKwLvZhldgRSpzWAXggdn8Q8LyZWexzRSRbFQxXHDwY3nsPJk70xw8+GP70J+jQAY47DipXjrbODFSuPnczqwxMAg4CeoUQvipxSn1gAUAIIdfMVgN7ActLvE43oBtAo0aNdq5yEUlNIXiIDxoEb79duBDXccfB4497C/3QQ6OtMQuUK9xDCHnAkWa2B/CumTUPIUzf0TcLIfQB+gDk5OSoVS+SKfLz4auvCgN9/nyfCdq6NdxxB/z2t7D//lFXmVV2aLRMCGGVmY0CzgSKhvsioCGw0Mx2AXbHL6yKSKbKy/PNK95+249Fi2DXXeGMM+CBB+Dcc3VBNELlGS1TD9gSC/bqQFv8gmlRQ4ArgP8AHYGR6m8XyUC5uTB2rLfQ33kHlizxlRTPOguefNKHLO6+e9RVCuVrue8H/DPW714JGBhC+MDMHgImhhCGAK8C/c3se+BnoHPCKhaR5MrN9ZEtb70F777rm0LXqOFDFTt29NtataKuUkooz2iZb4CjSnn8viL3NwIXxrc0EYlMfr53uQwY4KG+bBnUrOl95x07+lj0GjWirlK2QzNURcSF4GugDxgAb77pY9KrV/dA79zZA7169airlHJSuItkuxkzPNAHDIDvv4cqVTzIn3zSg11dLmlJ4S6Sjf73P2+dDxgA06b5Oi6tW0P37vC732mUSwZQuItki+XLPdD79/cx6eALcz33nPej77tvtPVJXCncRTLZxo2+bG7//vDRRz7ypUUL73Lp3Bk0UzxjKdxFMk0IMG6cB/pbb/nqi/vtB7fcApddBocfHnWFkgQKd5FM8d13Huj/+hfMm+fL555/vgd669ZanCvLKNxF0tnKlfDGG9Cvn/ejV6rk2889/LAv0FWzZtQVSkQU7iLpJj8fRo6Evn19CYBNm+CII+Dpp+Hii7VAlwAKd5H0MXcuvPaaHz/8AHXqQLduvq/oUVtNIpcsp3AXSWUbNnjrvG9fb62b+aqLTz3lqy5q1yLZBoW7SKop2Oyib1/vT1+9Gg44wPvRr7gCGjaMukJJAwp3kVSxerWPdOnTB775xtdx6dgRrrwSWrXyi6Ui5aRwF4naxInQu7e30tevh6OP9o87d9ba6FJhCneRKKxbB//+N7z0Ekye7Mvn/v73cM01kJMTdXWSARTuIsk0ZYoH+uuvw9q1vhRAr15wySVqpUtcKdxFEm3DBl+wq3dvn2hUrRp06uSt9OOP9xEwInGmcBdJlB9+gBdegFdegRUr4Fe/gr//HS6/3MeoiySQwl0knkKA0aN9Gd333vPHOnSAP/4RTj1VrXRJGoW7SDz88osPY3z+eZg+3Te7uOMOuO46aNw46uokC5U5cNbMGprZKDP71sxmmNnNpZxzqpmtNrMpseO+0l5LJOPMmQO33QYNGsC11/oWdX37+v6jTzyhYJfIlKflngvcFkKYbGa1gElmNiyE8G2J8z4LIbSPf4kiKSYE+Owz+Otf4f33fSndCy7wrpcTT1TXi6SEMsM9hLAYWBy7v9bMZgL1gZLhLpLZtmyBQYOgZ0+feLTXXnD33d5ir18/6upEitmhPnczawIcBXxVytMnmNlU4Efg9hDCjJ2uTiQVrF7tI16eeQYWLICDD/ZhjZdf7ksEiKSgcoe7mdUE3gZuCSGsKfH0ZKBxCGGdmZ0NDAaalfIa3YBuAI20d6OkuvnzPdBfecUnHP3mNz7h6JxztM6LpLxyfYeaWRU82F8PIbxT8vkQwpoQwrrY/Y+AKmZWt5Tz+oQQckIIOfXq1dvJ0kUSZOJEX9flwAPh2Wfht7/1x0aP9vsKdkkDZbbczcyAV4GZIYSe2zhnX2BJCCGYWUv8l8aKuFYqkkghwKhR8PjjMHw41K4Nt94KN92kJXYlLZWnW+Yk4DJgmplNiT3WA2gEEELoDXQErjOzXGAD0DmEEBJQr0h85ef7iJfHHoPx42GffeDJJ/0iae3aUVcnUmHlGS0zDtju2K4QwvPA8/EqSiThtmyBAQN8LPq330LTpr5UQNeu2t1IMoJmqEp22bDBJxk99ZRfMG3e3GeWduoEu+jHQTKHvpslO/zyi7fMn34ali6FE07w9V808kUylMJdMtu6dR7qTz0Fy5dD27Y+8ahVK80klYymcJfMVDLU27WD++/3FrtIFlC4S2ZZt84nGj39tIf6mWd6qB9/fNSViSSVwl0yQ0GoP/WUb4yhUJcsp3CX9LZpk6/z8uijsGwZnHWWh/pxx0VdmQgQ8OW2vgGmxY5vgMuB2xL6zgp3SU+5udC/PzzwgG9n17q1B7xa6hKZTcBMYGqJo+hk/QZAC2D/hFejcJf0EgK8/Tbcey/MmgXHHuvj1tu0iboyySpL2TrEZ+LbXwBUw0P8d8ARwOGxj5O3d67CXdJDCDBsGPToAZMmwWGHwTvvwHnnaUijJFAuMJutg/ynIufUxwO8fez2CHxR3MpJrbQkhbukvvHj4c47YcwYaNIE/vlPuOQS3wFJJG7WAVPwFcyn4CE+A+9uAdgVOAxoR2GIHwHslfRKy0PhLqlr7lxvqQ8YAHvv7TNKr74aqlaNujJJeyuBr/EgLzi+wy+AAuyNB/cfKQzxQ4EqSa+0ohTuknpWrfJVGp95xlvn994Ld9wBtWpFXZmkpaUUD/HJwNwizzcCjgYuid0eDeyX5BrjT+EuqWPzZh/W+OCDsHIlXHEFPPKI9ieVcgrAIrYO8kVFzjkIOBa4Bg/xo4Ct9hXKCAp3iV4I8O678Oc/w/ff+8iXp5+GI4+MujJJaUuACUWOicCy2HOV8G6U0yhsjR8J7J78MiOicJdoTZ3qux2NHesjYD76yGeXagSMFLMaD++iYb4g9lwl4Nf4aJVj8CA/HNgt+WWmEIW7RGPFCrjvPu+GqVMHXnwR/vAHraku+GZuUyge5LOLPH8gvkHcsbHjaLI9yEujnyRJrrw86NMH7rkHVq+GG27wPvY6yZvcIakkDx9uOD52TACmUzgZaH88wC+L3eYAeya/zDSkcJfkGTvWu2CmToXTTvPRMC1aRF2VJNUy4EvgP7Hb8cAvsefq4OF9J4Wtcl1MryiFuyTewoU+lHHAAGjUCN56Cy64QP3qGW8LvkhW0TD/X+y5XfALnF2B44Hj8O4WfU/Ei8JdEic31yce3Xef37//fp9pWqNG1JVJQiymeJBPxPvPwceNn4APQTwB7yfX90EilRnuZtYQ6Afsgw8k7RNCeKbEOQY8A5wNrAe6hBAmx79cSRvjx8M118CUKb4Mb69e0LRp1FVJ3OThrfJxwOd4mM+PPVcFD+9r8Fb5CUBD1CpPrvK03HOB20IIk82sFjDJzIaFEL4tcs5Z+Eo5zfC/r16M3Uq2WbXKlwzo3Rv2209dMBljPfAVHubj8Nb52thzDfAAvxkP86PwVRElSmWGewhhMf73FiGEtWY2E7/KUTTcOwD9QggB+NLM9jCz/WKfK9kgBHjzTbj1Vli61C+cPvQQ1K4ddWVSIcvwFnlBmE/C23kGNAcuBU6OHY0iqlG2Z4f63M2sCf5r+asST9WncEYBwMLYYwr3bDB3rnfBDBsGOTnwwQdwzDFRVyXlFvALneOKHAXjyqsCLYE78CA/gWSuSS4VV+5wN7OawNvALSGENRV5MzPrBnQDaNRIv+3TXl4ePP+8d8NUruwXT6+7TkvxpryAh/fo2DGGwvXJ6+AhfmXs9hg84CXdlCvczawKHuyvhxDeKeWURfgVkwINKL5aDwAhhD5AH4CcnJxQ8nlJI7NmwVVXwRdf+AXTl16Chg3L/jyJQABmUTzMl8Seqw+0Bn6Dh/mh+HR+SXflGS1jwKvAzBBCz22cNgS40cwG4BdSV6u/PUPl5vqiXg884EMa+/WDSy/VBdOUEvAt30ZTGOZLY8/VB9oCp+KBrrHlmao8LfeT8Lm/08xsSuyxHsSuooQQegMf4cMgv8cvq3eNf6kSualT4corYfJkOP98H964775RVyX/3zIfSWGYF6yO2ADfOeg3eKAfgMI8O5RntMw4yvhuiI2SuSFeRUmK2bIFHn8cHn4Y9tzThzd27Bh1VVluETACGB47Cv5QboiPTC4I86YozLOTZqjK9s2eDZddBhMmwMUX+0XTvVJzz8jMthpvkReE+czY43WBNsDpeN+5wlycwl1KFwK88IKvCVOtmo9hv+iiqKvKIpvwWZ8FYT4BnxVaHWiFj2Y5HV+3XBdAZWsKd9naokXet/7pp9CuHfTtC/vvH3VVGa5geOLHwCfAWPzyVSV8nPldeJgfj4YmSnko3KW4AQPg+uth0yZvuV97rUbCJMwa/CLox7GjYG2WQyhsmf8G2COS6iS9KdzFrV3rof6vf8Fxx0H//tCsWdRVZZiAL7ZVEObj8Cn9NfF+87vwkS1NIqpPMonCXWDSJOjcGebM8fHrd9+t7e7i5mdgGIXdLQWjWo4AbgPOBE4Edo2kOslc+gnOZvn58Pe/Q/fusM8+MHo0nHJK1FWluYIJRO/Hjv8A+fi0/rb4MMUz8O3jRBJH4Z6tli2DLl3go4+gQwd49VUNcaywzfgF0PeBD4A5scePAu7GA/1Y9OMmyaTvtmw0cqQvGfDzz77w1/XX66LpDluOT8x+H+9uWYuvYd4G3wP0HHx2qEg0FO7ZJD8fHn3Ut7s7+GAYOhSOOCLqqtLITOA9CrtbAr59XGegPT66RVvHSWpQuGeLn3/21vrQoXDJJb6K4267RV1Vigv4JhXvAO/i67eAbyF3Hx7oR6NJRJKKFO7ZYPJk3+pu0SKNXS9THj5EsSDQFwCV8XVabsQ3HVN3i6Q+hXume/VVuOEGqFcPPvvMx7BLCZvwRbjewVevXobPAm0HPAT8FtDFZkkvCvdMtWED3HijLx1w+unw7397wEvMRmAo8BY+wmUtUAvvajkfH39eM7LqRHaWwj0TLVoE550HEyf6hKQHH9TWd4C30D8FBuIXRtfiqyp2wgO9NVq3RTKFwj3TfPWVB/u6dTB4sI9hz2pb8C6XN/E+9NX4hKKL8FA/Df0YSCbSd3Um6d8frr7aV3AcNgyaN4+6oojk4jsSDcT70VcAtYHz8EA/HU33l0yncM8EeXlw113w1FNw6qkwaFAWzjYtGLbYHxiA7xlaEzgXD/R2qMtFsonCPd2tXg2//70vI3D99b5WTJUqUVeVRPOA1/FQn40HeHvgYnxb3+qRVSYSJYV7Ops/H845x7fCe/FFH7+eFVbio1z642PSwXcnuh3oiNY/F1G4p6/Jkz3YN2zwHZNOOy3qihJsM76WS3986OJm4FDgUeASoHF0pYmkoDLnTZtZXzNbambTt/H8qWa22symxI774l+mFPPhh9CqFVStCl98keHBPg24FagP/A5vqV8PTAS+BXqgYBfZWnla7q8BzwP9tnPOZyGE9nGpSLbvxRd9ctKRR3rI77tv1BUlwGrgDaAvvjF0FXzaf1d8LXT9wSlSljJ/SkIIY82sSeJLke3Kz/cRMX/5i3fHDBgANTNpBmU+MAYP9EH4DNLmwN+AS/HJRiJSXvFqAp1gZlOBH4HbQwgz4vS6ArBlC3TtCq+/DtddB88+m0Hb4P2IB/o/8E0uagNdgKuAYwAtcCZSEfFIiMlA4xDCOjM7GxgMlLqzspl1A7oBNGrUKA5vnQXWr4cLL/Shjo895lvipf2KjgEYCbyILwOQi88UfRBfBkBroovsrJ1eiDqEsCaEsC52/yOgipmV+jd0CKFPCCEnhJBTT4tYlW3VKmjXztdgf+kl75ZJ62D/Ge9mORSfJToKuAX4Dg/7S1Gwi8THTrfczWxfYEkIIZhZS/wXxoqdrizb/fSTB/vMmTBwIHTsGHVFFRSA8UBvfOboRuAE/Pr8hfjWdCISb2WGu5m9ge9UUNfMFgL348MXCCH0xmeNXGdmucAGoHMIISSs4mwwdy60besB/+GHfj/tbMRHvDyP99zVxPvSrwW0tZ9IopVntMzFZTz/PP4TLPEwaxa0bg2bNsGIEWm4ucZPeF/6i/imF78GXsAnGtWOsC6R7JIpQy4yw4wZHuxmMGZMmq3qOBn4O971kouv73IzvkZ6Ol8nEElPCvdU8c030KaNL/o1ciQcemjUFZVDHj7a5e/AZ3jXy7XAH9nGgCkRSRKFeyr4+mvfCq96dRg1CpqlejCux8em/xVflbEJ0BO4Etg9sqpEpJDCPWoTJ/oF09q1vcV+4IFRV7QdK4BewHPAcuBEPNTPBbSNn0gqUbhHadIkb7HvuacHe5MmUVe0DfPxEH8Fb7W3B/4MnBxlUSKyHQr3qEybBmecAXXqwOjRkJIzdqcBf8GHNBrwe+AOfM0XEUllCvcozJ5d2Mc+YkQKBvvXwEP4ShK74RdIbwVSrU4R2RaFe7LNneujYsCD/YADoq2nmEl4qA/BL4zeB9wEZNt+rCLpT+GeTAsX+jj2DRt8VMwhh0RdUcwEfNGuD/Et6h7EQ13b1YmkK4V7sixZ4i32n3/2Fvvhh0ddEb7mywPAUGBP4BG8C0YzSUXSncI9GdauhbPP9pb7p59CTk7EBc0A7sH71PcCHgNuBGpFWZSIxJHCPdE2b4bzz4epU+H99+GkkyIsZh7eUu+PzyZ9CF9yV6EukmkU7omUnw9dusDw4fDaa3DWWREVsgR4FF92txLwJ6A7ulAqkrkU7okSAtx+O7zxBjzxBFxxRQRFrMXHqf8NX4L3SnwETIMIahGRZFK4J8rTT8Pf/gY33QR33pnkN8/D9yS9B2+1XwQ8DByc5DpEJCoK90R4800P9Isu8oBP6tZ4w/Ful2nASfiY9ZZJfH8RSQU7vYeqlPDll94Fc/LJ0K8fVErWl3gW8FugLd4dMxBfhlfBLpKNFO7xNH8+dOgA9evDu+9C1apJeNOV+Nj05sBY4ElgJr4/qTbJEMlW6paJlzVroH173x5vzBioWzfBb5iPbzJ9J74Ubzd8ZuneCX5fEUkHCvd4yM2Fzp1h5kz4+OMk7KI0BbgB+AI4AfgUODLB7yki6UTdMvFw++0wdCj06uWrPSbManxf0mOA7/DdkMahYBeRksoMdzPra2ZLzWz6Np43M3vWzL43s2/M7Oj4l5nC+vWDZ56Bm2+Ga65J0JsEfE31Q/BdkK7Fw70r+v0sIqUpTzK8Bpy5nefPwndDboZ3/L6482WlicmTPdBPPdXHtSfED/jOR7/H11OfgG91VydB7ycimaDMPvcQwlgza7KdUzoA/UIIAfjSzPYws/1CCIvjVGNqWr4cfvc7qFfPx7XvEu/LF/nAC8Bdsft/w0fFaK9SkXSSm+uLwS5fXngceCAccURi3zceiVQfWFDk44Wxx7YKdzPrhrfuaZRyuw/tgNxc6NTJl/EdNw72jvcIlW+BPwD/Ac4AXgKaxPk9RGRHhQCrV8PSpcXDenvHypVbv84dd6RHuJdbCKEP0AcgJycnJPO94+quu3xD63/8I87L9+bi49Qfwldt7AdcisariyRGCD6KeelSWLbMj4L7pT22bBls2VL6a1Wt6n/I163rR+PGhfdLHg2SsLxTPMJ9EdCwyMcNYo9lpnff9f7166/3FR/jZjZwBfAV0Al4Fo1ZF9kxIfj2CTsS1ps3l/5atWr5H+X16nlQ5+T4/YLHigZ53bpQo0aSVxopQzzCfQhwo5kNAI4DVmdsf/u8eXDllXDMMdCzZ5xetKBv/U6gOjAAD3cRAQ/slSvhp5+8J7Tgtuj9n34qDO1thXXNmoXB3LAhHH108bAuelu3LlSrltx/Z7yVGe5m9gZwKlDXzBYC9wNVAEIIvYGPgLOB74H1+Pi8zLN5s09Uys+HgQPjtLTAAvzLNQIfdPQKsH8cXlcktRX0XZcM6NJulywpvSukShXYZx/Yd1/Yf3848sjSw7rgqF49+f/OKJVntMzFZTwf8OmSma1HD/jqK3jrLTjggDi84JvANXg/ex/8AmoK/U0nUgGbN3so//ijH4sX+8eltbY3bdr683fZxUN53309uFu0KLxf8rZOndTqBkk1Wn6gPD74AP76V+9n79hxJ19sPT7L9BV86YB/AfH4ZSGSOFu2FIb24sXFw7vg/o8/+uiQkipV8sAuCOZDD912YO+5ZxIXUs1wCveyLFzoS/geeaQH/E6ZhvenzwJ64At96b9AopOb663oogFdMrAXL/b+7FBifFvlyh7I++8PTZrAiSfCfvv5xwXHfvt5/3VlTc9IOiXL9uTne7Bv2uQTlSp8hSXgXS+3ALvjC30lcg0aEW9tL14MCxZ4G6XoUfDY4sX+bV5UpUqFod2wIRx3XPGwLrhfr55CO5Up3Lfn2Wd9PPvLL8PBFd2ibi1wFfAWPiGpH7BPvCqULLV5s7eqiwZ1yeD+6aetW9u77eaB3aABtG3rt/Xr+1EQ3nvvnYAJ15J0+i/clunToXt3OPdcuOqqCr7ILOB8fAz74/hwR3UoyvaF4H3X8+cXP374oTC8lyzZ+vNq1/awbtDAL0QWhHjB0bChn6OLkNlB4V6aTZvg0kv9J+Hllyv40/AuPimpKjAMaB3XEiV95eZ6q7tkcBe9v3598c+pWdMn0jRsCEcdVTy0C47ataP590hqUriX5v77YepUeO+9CqwbkwfcAzwBHAu8TfEJvJLptmzx1vWcOT7vrWQLfOFCyMsr/jkFsyB//Ws4+2y/X/TYYw+1uGXHKNxL+vxz+Mtf4A9/8C6ZHbISHw0zDLgaX0Igzae5yVZC8FX+5swpPObOLbz/ww/Fw7tSJW9ZN27s+6aXDO5GjXzqukg8KdyL2rjR+9cbNarA8gL/xdddnwu8jE9KknS1aZO3srcV4GvWFD9/7719btsJJ8All0DTpv5x06Z+sVIXKCXZ9C1X1EMPwezZ8MknvmpQuY3GL5xWwpcSOCUR1Umcbd7sgf3f/8J33/ltwbFgQfGRJtWqFQb2Kaf4bUF4N23qfeIiqUThXmDyZO+O6doVzjhjBz7xVXzbu2bA+8CBCSlPKiY311vgBaFdNMTnzSs+xrtOHWjWDFq18s0UDjywMMT32UczJyW9KNzBr4BddZVf1Sr3LNR8oDvwFD5+fSA+QUmisHw5zJwJs2b58d13fsydW3zRqVq1PMCPPda7T5o1Kzz22iu6+kXiTeEO8NRTMGUKvPOON9/KtBlfzfHfwHX4hVN9KRMtP98vVhaE+MyZhfeLrmlSvbqHdYsWcP75Pv+sIMD33lujTiQ7KJFmz4YHH4QLL/Q9Ucu0FrgAHxHzGN56V1rE05Yt3uouCO+CAJ89u/j477p14Ve/8v+2X/2q8GjYUF0oItkd7iHADTd4U++558rxCUvxpeunAP8AuiSyuowXgrfEp03zY/p0v501q3hXSuPGHtqnnuq3hx7qt3XrRla6SMrL7nAfOBBGjIBevfyK2XbNwfvWfwTeA85JeHmZZMWKrUN8+nTfEq1Ao0bQvLlP4mne3Cf0HHywr4ciIjsme8N9zRq49VbfMu+aa8o4eTbQBtgAjASOT3h56So/H77/Hr7+uvD45htfxKpAnTreH3755X7bvLkfu+t6tEjcZG+4P/CAJ87gwWWsWzoDD/Z8fDx7iyQUlx42b4YZM4oH+dSpsG6dP1+lire+27UrDPEWLXzlQV3UFEms7Az3b77x5XyvvhpattzOiVOAtviWsaOAXyWlvFS0caMH94QJHuKTJ3uwF/SN16yw609IAAALyElEQVQJRxwBXbr4wlZHHQWHHRanrWZFZIdlX7gXXETdYw947LHtnDgBaAfUxLtiDkpKeakgL88vao4f72E+frz/PiwI8nr1PLzbtSsM8oMO0ggVkVRSrnA3szOBZ4DKwCshhCdKPN8Fn82zKPbQ8yGEV+JYZ/wMGgTjxsFLL21n1spEfKekvfBgb5Ks6pIuBJ9qP358YZhPnFjYtVK7tk/4ue02/yPn2GN9rRR1q4iktjLD3cwqA73w/omFwAQzGxJC+LbEqW+GEG5MQI3xs3Ej3Hmnd/xucwOOaXiLvQ4whkxbrnfLFu9W+eILXwDz8899qzWAXXf1rWK7dCkM8oMPVotcJB2Vp+XeEvg+hDAHwMwGAB2AkuGe+p591hcUGTZsGxdRv8N/h1XDW+zpH+wrV8J//lMY5OPHw4YN/lzjxnDaab6xccuWcPjh6iMXyRTlCff6wIIiHy8EjivlvAvMrBWekLeGEBaUck50li6FRx+F9u3h9NI2p55H8VExBySxuPj56ScYMwZGj4bPPvOLnuC/y4480q8hn3SSH/XrR1qqiCRQvC6ovg+8EULYZGbXAP+klH3lzKwb0A2gUaNGcXrrcrr/fvjlF19HZis/4sH+Cz4q5tCklrYzli71MB81ygN95kx/vFYtb5F36uRB3rKllqUVySblCfdFFO+faEDhhVMAQggrinz4CvCX0l4ohNAH6AOQk5MTSjsnIWbMgD594Prrfe56MWuAs4AleFfMEUkrqyJWroSRIz3IR40qbJnXrOnrjHfp4tP0jz5aG0SIZLPy/PhPAJqZWVM81DsDvy96gpntF0KIXZbjXGBmXKvcWXfd5U3ZBx4o8cRmfJONb4EP8MsLqSU310ewfPKJH+PH+yzQ3XbzLdsuvdT7zY8+2icNiYhAOcI9hJBrZjcCn+BDIfuGEGaY2UPAxBDCEOAmMzsXyAV+JpVW1PriC3j/fR/TXmzoYz5wJb5z0mv4CJnUsGBBYZgPHw6rVvnQw5Yt4Z57fC+Rli0V5iKybRZC8npHisrJyQkTJ05M7JuE4M3amTN948tiK1B1B54EHgHuTmwdZcjLgy+/hCFD/PdQQb95/fo+UahdO78GvOeekZYpIinAzCaFEHLKOi+ze2WHD/erjc8+WyLYX8aD/VqgRySlrVsHn37qgf7hh77ZxC67wG9+A3/4gwf6YYdpspCIVEzmhnsI0KOHryPbrVuRJ8YA1wNnAs+RzI02liyBd9/1QB8xwhfe2mMPOOccOPdcD3StjCgi8ZC54T54sM+j79u3yMycufguSgcCb5CMf/7Spb5738CB/kdEfr5vvHzDDR7oJ52kvnMRib/MDPf8fLj3XjjkELjsstiDa/GBPHn4sPw9Evb2y5YVBvro0V7OIYfA3Xf7bn7Nm6u7RUQSKzPDffBgHwD++uuxwd75wGX4CM2hQLO4v+X69fDee9Cvn/elK9BFJEqZF+4hwCOP+Fb3nTrFHnwK3xrvb/jaMfGRn+9T/Pv1g7fe8i3jGjWC7t39rVu0UKCLSDQyL9yHDvVlD/v2jS0ONhYf6nghcHNc3mLePHj1VejfH+bP99mhF17o28a1aqVVFEUkepkV7iHAww978/nSS/ElBTrji4C9ws6MjMnNhY8+gt694eOPvUXetq3PjTrvPKhRIz7/BBGReMiscB81ymcDvfACVKmEr5KwEvgYqF2hl1y40FvpL78Mixb5/p/33utj0Rum/4rAIpKhMivcH3nE07drV+BhfCGwvsDhO/xS48dDz56+cVNeno9Bf+45XzFYQxdFJNVlTrh/+aW33Hv2hGqT8XC/DOha7pfIy/OBNj17+pI0tWvDLbfAddf52HQRkXSROeH+17/6dM+rOwMnAY2A58v1qRs2eNdLz54wdy40bQrPPON/ANSqlciiRUQSIzPCfe5cnzV0551Q825gPr7MwPb72X/5xS+QPv2072B04ol+v0OHbezCJyKSJjIj3J95xscf3t4UeAIf+njyNk9fswZ69fKW+vLl0KYNDBjgi3aJiGSC9A/3Vau8T6XbebBXDyAHuL/UUzdt8oE0jz4KK1bAmWf6yJcTT0xqxSIiCZf+021eftnXz31kDb5+zD+B4sNZ8vJ8wtEhh8Cf/uS7Fo0f7/OdFOwikonSO9y3bPG12u9uAXU+Be4FDit2yvDhHuaXX+4bMX36qR/HHhtJxSIiSZHe4f7OO7BmIdyzCB/Lfuf/P/XDD9Cxo88iXbsW3njD9yJtG7+lZUREUlZ697m/8AL0rgVVV+FbvO7Kxo0+KvLRR/2Uhx+G22+HatWiLFREJLnSN9xnzIAwFi4GuB3I4fPP4cor4bvv4IILPOQbN464ThGRCKRvt8xLvaCXQV5D1q17kJtvhlNO8a3rPvnElw1QsItItipXuJvZmWY228y+N7PupTxf1czejD3/lZk1iXehxaxbB1X7QovAqLGv06JFDZ57Dm68EaZNgzPOSOi7i4ikvDLD3cwqA72As/ChKBeb2WElTrsKWBlCOAjfEePJeBdazNsvsuXOPHr86R+0aXMyVarA2LE+cKZmzYS+s4hIWihPy70l8H0IYU4IYTMwAOhQ4pwO+ABzgEFAG7ME7UEUAnPW/5tT2n/G43/rwlVXGV9/DSdve0KqiEjWKc8F1frAgiIfLwSO29Y5IYRcM1sN7AUsj0eRRX3c+2Mu+vMYKoVKDBzoOyCJiEhxSb2gambdzGyimU1ctmxZhV7joIZrObH5BKZ+tV7BLiKyDeVpuS8Ciu451CD2WGnnLDSzXYDdgRUlXyiE0AfoA5CTkxMqUvBB7S/i4/YV+UwRkexRnpb7BKCZmTU1s13xTUmHlDhnCHBF7H5HYGQIoULhLSIiO6/MlnusD/1GfApoZaBvCGGGmT0ETAwhDAFeBfqb2ffAz/gvABERiUi5ZqiGED4CPirx2H1F7m8E1AMuIpIi0neGqoiIbJPCXUQkAyncRUQykMJdRCQDKdxFRDKQRTUc3cyWAfMjefP4qUsCllhIY/p6FKevRyF9LYrbma9H4xBCvbJOiizcM4GZTQwh5ERdR6rQ16M4fT0K6WtRXDK+HuqWERHJQAp3EZEMpHDfOX2iLiDF6OtRnL4ehfS1KC7hXw/1uYuIZCC13EVEMpDCvQLMrKGZjTKzb81shpndHHVNUTOzymb2tZl9EHUtUTOzPcxskJnNMrOZZnZC1DVFycxujf2cTDezN8ysWtQ1JZOZ9TWzpWY2vchje5rZMDP7b+y2TrzfV+FeMbnAbSGEw4DjgRtK2TQ829wMzIy6iBTxDPBxCOFQ4Aiy+OtiZvWBm4CcEEJzfNnwbFsS/DXgzBKPdQdGhBCaASNiH8eVwr0CQgiLQwiTY/fX4j+89aOtKjpm1gA4B3gl6lqiZma7A63wPQ4IIWwOIayKtqrI7QJUj+3SVgP4MeJ6kiqEMBbf56KoDsA/Y/f/CZwX7/dVuO8kM2sCHAV8FW0lkfo7cCeQH3UhKaApsAz4R6yb6hUz2y3qoqISQlgEPA38ACwGVocQPo22qpSwTwhhcez+T8A+8X4DhftOMLOawNvALSGENVHXEwUzaw8sDSFMirqWFLELcDTwYgjhKOAXEvAnd7qI9SV3wH/p7Q/sZmaXRltVaoltSRr3YYsK9woysyp4sL8eQngn6noidBJwrpnNAwYArc3sX9GWFKmFwMIQQsFfcoPwsM9WpwNzQwjLQghbgHeAEyOuKRUsMbP9AGK3S+P9Bgr3CjAzw/tUZ4YQekZdT5RCCHeFEBqEEJrgF8pGhhCytmUWQvgJWGBmh8QeagN8G2FJUfsBON7MasR+btqQxReYixgCXBG7fwXwXrzfQOFeMScBl+Gt1Cmx4+yoi5KU8UfgdTP7BjgSeCzieiIT+wtmEDAZmIZnTlbNVjWzN4D/AIeY2UIzuwp4AmhrZv/F/7p5Iu7vqxmqIiKZRy13EZEMpHAXEclACncRkQykcBcRyUAKdxGRDKRwFxHJQAp3EZEMpHAXEclA/wfUeLXbJ2zZWgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1137ad208>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(1,10,1000,endpoint = False)\n",
    "y1 = np.log2(x)\n",
    "y2 = np.log(x)\n",
    "y3 = np.log10(x)\n",
    "plt.plot(x,y1,'red',x,y2,'yellow',x,y3,'blue')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 三角函數（Trigonometric functions）\n",
    "三角函數是常見的關於角的函數，三角函數在研究三角形和園等集合形狀的性質時，有很重要的作用，也是研究週期性現象的基礎工具；常見的三角函數有：正弦（sin），餘弦（cos）和正切（tan），當然，以後還會用到如餘切，正割，餘割等。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11368ab70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(-10, 10, 10000)  \n",
    "a = np.sin(x)  \n",
    "b = np.cos(x)  \n",
    "c = np.tan(x)  \n",
    "# d = np.log(x)  \n",
    "  \n",
    "plt.figure(figsize=(8,4))  \n",
    "plt.plot(x,a,label='$sin(x)$',color='green',linewidth=0.5)  \n",
    "plt.plot(x,b,label='$cos(x)$',color='red',linewidth=0.5)  \n",
    "plt.plot(x,c,label='$tan(x)$',color='blue',linewidth=0.5)  \n",
    "# plt.plot(x,d,label='$log(x)$',color='grey',linewidth=0.5)  \n",
    "  \n",
    "plt.xlabel('Time(s)')  \n",
    "plt.ylabel('Volt')  \n",
    "plt.title('PyPlot')  \n",
    "plt.xlim(0,10)  \n",
    "plt.ylim(-5,5)  \n",
    "plt.legend()  \n",
    "plt.show()  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 複合函數（composition）\n",
    "函數 $f$ 和 $g$ 複合，$f \\circ g = f(g(x))$，可以理解為先把$x$ 輸入給 $g$ 函數，獲得 $g(x)$ 後在輸入函數 $f$ 中，最後得出：$f(g(x))$\n",
    "* 幾個函數符合後仍然為一個函數\n",
    "* 任何函數都可以看成若干個函數的複合形式\n",
    "* $f\\circ g(x)$ 的定義域與 $g(x)$ 相同，但是值域不一定與 $f(x)$ 相同\n",
    "\n",
    "例：$f(x) = x^2, g(x) = x^2 + x, h(x) = x^4 +2x^2\\cdot x + x^2$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "f(1) equals 1 g(1) equals 2 h(1) equals 4\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x114391208>"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAD8CAYAAAB+UHOxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAGX5JREFUeJzt3X+MHOd93/H3J0dKvjiujrIujHgkQxomLpUrRFQWFF27RSraPIoNzIvgCDSK6OIQYNMorV20TMUaCFPJhSywjWIBtlzGVEMZrilaoUjCVXK+UgryT0TxKEqk9ePKk2WFd5JIxuTRSXWQReXbP+Y5au90y9u93dsfN58XsNiZ7zyz+8zs7Hx3n3l2H0UEZmaWPz/T6AqYmVljOAGYmeWUE4CZWU45AZiZ5ZQTgJlZTjkBmJnllBOAmVlOOQGYmeWUE4CZWU4taHQFruS6666LFStWNLoaZmYt5dixY38bEZ0zlWvqBLBixQoGBwcbXQ0zs5Yi6bVyyrkJyMwsp5wAzMxyygnAzCynnADMzHLKCcDMLKeauhfQbB04PsrO/iFeHxtnSUc723q66V3d1ehqmZnNqJ7nr3mXAA4cH2X7/pOMv/MuAKNj42zffxLAScDMmlq9z19lNQFJ+veSXpD0A0nfkfQBSSslHZE0LOlRSVelslen+eG0fEXR42xP8SFJPTXfGmBn/9DlnTdh/J132dk/NBdPZ2ZWM/U+f82YACR1Af8OKETEPwHagM3A/cADEfFR4AKwJa2yBbiQ4g+kcki6Ia33MWAD8HVJbbXdHHh9bLyiuJlZs6j3+avci8ALgHZJC4CfBd4AbgUeS8v3AL1pelOaJy1fJ0kpvjci3o6IV4FhYE31mzDZko72iuJmZs2i3uevGRNARIwC/w34G7IT/0XgGDAWEZdSsRFgooGqCzid1r2Uyn+4OD7NOjWzraeb9oWTv1i0L2xjW093rZ/KzKym6n3+mvEisKRFZJ/eVwJjwHfJmnDmhKStwFaA5cuXV7z+xIUS9wIys1ZT7/NXOb2APgW8GhHnACTtBz4BdEhakD7lLwVGU/lRYBkwkpqMrgF+XBSfULzOZRGxC9gFUCgUYjYb1bu6yyd8M2tJ9Tx/lXMN4G+AtZJ+NrXlrwNeBJ4CPpvK9AEH0/ShNE9a/mRERIpvTr2EVgKrgGdqsxlmZlapGb8BRMQRSY8BzwKXgONkn9D/N7BX0pdTbHdaZTfwLUnDwHmynj9ExAuS9pElj0vAXRExub+TmZnVjbIP582pUCiExwMwM6uMpGMRUZipnP8LyMwsp5wAzMxyygnAzCynnADMzHLKCcDMLKecAMzMcsoJwMwsp5wAzMxyygnAzCynnADMzHLKCcDMLKecAMzMcsoJwMwsp5wAzMxyygnAzCynZkwAkrolPVd0+4mkL0q6VtKApFPpflEqL0kPShqWdELSzUWP1ZfKn5LUV/pZzcxsrs2YACJiKCJuioibgF8B3gIeB+4GDkfEKuBwmge4jWy4x1Vkg7s/BCDpWmAHcAuwBtgxkTTMzKz+Km0CWge8EhGvAZuAPSm+B+hN05uARyLzNNng8dcDPcBARJyPiAvAALCh6i0wM7NZqTQBbAa+k6YXR8QbafpNYHGa7gJOF60zkmKl4mZm1gBlJwBJVwGfAb47dVlkAwvXZHBhSVslDUoaPHfuXC0e0szMplHJN4DbgGcj4kyaP5Oadkj3Z1N8FFhWtN7SFCsVnyQidkVEISIKnZ2dFVTPzMwqUUkC+BzvNf8AHAImevL0AQeL4nem3kBrgYupqagfWC9pUbr4uz7FzMysARaUU0jSB4FPA/+6KPwVYJ+kLcBrwB0p/gSwERgm6zH0eYCIOC/pXuBoKndPRJyvegvMzGxWlDXfN6dCoRCDg4ONroaZWUuRdCwiCjOV8y+BzcxyygnAzCynnADMzHLKCcDMLKecAMzMcsoJwMwsp5wAzMxyygnAzCynnADMzHLKCcDMLKecAMzMcsoJwMwsp5wAzMxyygnAzCynnADMzHLKCcDMLKfKSgCSOiQ9JullSS9J+rikayUNSDqV7helspL0oKRhSSck3Vz0OH2p/ClJfaWf0czM5lq53wC+CvxFRPwS8MvAS8DdwOGIWAUcTvOQDR6/Kt22Ag8BSLoW2AHcAqwBdkwkDTMzq78ZE4Cka4B/DuwGiIifRsQYsAnYk4rtAXrT9Cbgkcg8DXRIuh7oAQYi4nxEXAAGgA013RozMytbOd8AVgLngP8p6bikb6ZB4hdHxBupzJvA4jTdBZwuWn8kxUrFJ5G0VdKgpMFz585VtjVmZla2chLAAuBm4KGIWA38P95r7gEgspHlazK6fETsiohCRBQ6Oztr8ZBmZjaNchLACDASEUfS/GNkCeFMatoh3Z9Ny0eBZUXrL02xUnEzM2uAGRNARLwJnJbUnULrgBeBQ8BET54+4GCaPgTcmXoDrQUupqaifmC9pEXp4u/6FDMzswZYUGa5fwt8W9JVwA+Bz5Mlj32StgCvAXeksk8AG4Fh4K1Ulog4L+le4Ggqd09EnK/JVpiZWcWUNd83p0KhEIODg42uhplZS5F0LCIKM5XzL4HNzHLKCcDMLKecAMzMcsoJwMwsp5wAzMxyygnAzCynnADMzHLKCcDMLKecAMzMcsoJwMwsp5wAzMxyqtw/g8uVA8dH2dk/xOtj4yzpaGdbTze9q983do2Z2fu00vnDCWCKA8dH2b7/JOPvvAvA6Ng42/efBGjaF9HMmkOrnT/cBDTFzv6hyy/ehPF33mVn/1CDamRmraLVzh9OAFO8PjZeUdzMbEKrnT/KSgCSfiTppKTnJA2m2LWSBiSdSveLUlySHpQ0LOmEpJuLHqcvlT8lqa/U8zXSko72iuJmZhNa7fxRyTeAfxERNxUNMnA3cDgiVgGHeW+g+NuAVem2FXgIsoQB7ABuAdYAOyaSRjPZ1tNN+8K2SbH2hW1s6+kusYaZWabVzh/VNAFtAvak6T1Ab1H8kcg8DXSkQeN7gIGIOB8RF4ABYEMVzz8neld3cd/tN9LV0Y6Aro527rv9xqa8gGNmzaXVzh/l9gIK4PuSAvgfEbELWJwGewd4E1icpruA00XrjqRYqXjT6V3d1bQvmJk1t1Y6f5SbAD4ZEaOSfh4YkPRy8cKIiJQcqiZpK1nTEcuXL6/FQ5qZ2TTKagKKiNF0fxZ4nKwN/0xq2iHdn03FR4FlRasvTbFS8anPtSsiChFR6OzsrGxrzMysbDMmAEkflPShiWlgPfAD4BAw0ZOnDziYpg8Bd6beQGuBi6mpqB9YL2lRuvi7PsXMzKwBymkCWgw8Lmmi/P+KiL+QdBTYJ2kL8BpwRyr/BLARGAbeAj4PEBHnJd0LHE3l7omI8zXbEjMzq4giatJ0PycKhUIMDg42uhpmZi1F0rGiLvsl+ZfAZmY55QRgZpZTTgBmZjnlBGBmllNOAGZmOeUEYGaWU04AZmY55QRgZpZTTgBmZjnlBGBmllNOAGZmOeUEYGaWU04AZmY55QRgZpZTTgBmZjnlBGBmllNlJwBJbZKOS/peml8p6YikYUmPSroqxa9O88Np+Yqix9ie4kOSemq9MWZmVr5KvgF8AXipaP5+4IGI+ChwAdiS4luACyn+QCqHpBuAzcDHgA3A1yW1VVd9MzObrbISgKSlwL8EvpnmBdwKPJaK7AF60/SmNE9avi6V3wTsjYi3I+JVsjGD19RiI8zMrHLlfgP4Y+D3gX9I8x8GxiLiUpofAbrSdBdwGiAtv5jKX45Ps85lkrZKGpQ0eO7cuQo2xczMKjFjApD0a8DZiDhWh/oQEbsiohARhc7Ozno8pZlZLi0oo8wngM9I2gh8APhHwFeBDkkL0qf8pcBoKj8KLANGJC0ArgF+XBSfULyOmZnV2YzfACJie0QsjYgVZBdxn4yIfwU8BXw2FesDDqbpQ2metPzJiIgU35x6Ca0EVgHP1GxLzMysIuV8AyjlPwF7JX0ZOA7sTvHdwLckDQPnyZIGEfGCpH3Ai8Al4K6IeLeK5zczsyoo+3DenAqFQgwODja6GmZmLUXSsYgozFTOvwQ2M8spJwAzs5xyAjAzyyknADOznHICMDPLKScAM7OccgIwM8spJwAzs5xyAjAzyyknADOznHICMDPLKScAM7OcqubfQK2EA8dH2dk/xOtj4yzpaGdbTze9q983+JmZNaE8vX+dAGrswPFRtu8/yfg72T9dj46Ns33/SYB5exCZzRd5e/+6CajGdvYPXT54Joy/8y47+4caVCMzK1fe3r/ljAn8AUnPSHpe0guS/kuKr5R0RNKwpEclXZXiV6f54bR8RdFjbU/xIUk9c7VRjfT62HhFcTNrHnl7/5bzDeBt4NaI+GXgJmCDpLXA/cADEfFR4AKwJZXfAlxI8QdSOSTdQDY62MeADcDXJbXVcmOawZKO9oriZtY88vb+LWdM4IiIv0+zC9MtgFuBx1J8D9CbpjeledLydZKU4nsj4u2IeBUYBtbUZCuayLaebtoXTs5r7Qvb2NbT3aAamVm58vb+LesicPqkfgz4KPA14BVgLCIupSIjwMQVki7gNEBEXJJ0Efhwij9d9LDF68wbExeK8tKLwGw+ydv7t6wEkAZvv0lSB/A48EtzVSFJW4GtAMuXL5+rp5lTvau75u0BYzbf5en9W1EvoIgYA54CPg50SJpIIEuB0TQ9CiwDSMuvAX5cHJ9mneLn2BURhYgodHZ2VlI9MzOrQDm9gDrTJ38ktQOfBl4iSwSfTcX6gINp+lCaJy1/MiIixTenXkIrgVXAM7XaEDMzq0w5TUDXA3vSdYCfAfZFxPckvQjslfRl4DiwO5XfDXxL0jBwnqznDxHxgqR9wIvAJeCu1LRkZmYNoOzDeXMqFAoxODjY6GqYmbUUScciojBTOf8S2Mwsp5wAzMxyygnAzCynnADMzHLKCcDMLKecAMzMcsoJwMwsp5wAzMxyygnAzCynnADMzHLKCcDMLKecAMzMcsoJwMwsp5wAzMxyygnAzCynyhkRbJmkpyS9KOkFSV9I8WslDUg6le4XpbgkPShpWNIJSTcXPVZfKn9KUl+p5zQzs7lXzjeAS8B/iIgbgLXAXZJuAO4GDkfEKuBwmge4jWy4x1Vkg7s/BFnCAHYAtwBrgB0TScPMzOpvxgQQEW9ExLNp+u/IxgPuAjYBe1KxPUBvmt4EPBKZp8kGj78e6AEGIuJ8RFwABoANNd0aMzMrW0XXACStAFYDR4DFEfFGWvQmsDhNdwGni1YbSbFScTMza4CyE4CknwP+DPhiRPykeFlkAwvXZHBhSVslDUoaPHfuXC0e0szMplFWApC0kOzk/+2I2J/CZ1LTDun+bIqPAsuKVl+aYqXik0TErogoREShs7Ozkm0xM7MKlNMLSMBu4KWI+KOiRYeAiZ48fcDBovidqTfQWuBiairqB9ZLWpQu/q5PMTMza4AFZZT5BPCbwElJz6XYfwa+AuyTtAV4DbgjLXsC2AgMA28BnweIiPOS7gWOpnL3RMT5mmzFPHPg+Cg7+4d4fWycJR3tbOvppne1L5eYlcPvn/Ipa75vToVCIQYHBxtdjbo6cHyU7ftPMv7Ou5dj7QvbuO/2G30Qm83A75+MpGMRUZipnH8J3GR29g9NOngBxt95l539Qw2qkVnr8PunMk4ATeb1sfGK4mb2Hr9/KuME0GSWdLRXFDez9/j9UxkngCazraeb9oVtk2LtC9vY1tPdoBqZtQ6/fypTTi8gq6OJC1XuxWBWOb9/KuNeQGZm84x7AZmZ2RU5AZiZ5ZQTgJlZTjkBmJnllBOAmVlOOQGYmeWUE4CZWU45AZiZ5ZQTgJlZTjkBmJnlVDlDQj4s6aykHxTFrpU0IOlUul+U4pL0oKRhSSck3Vy0Tl8qf0pS33TPZWZm9VPON4A/BTZMid0NHI6IVcDhNA9wG7Aq3bYCD0GWMIAdwC3AGmDHRNIwM7PGmDEBRMRfAVPH7t0E7EnTe4DeovgjkXka6JB0PdADDETE+Yi4AAzw/qRiZmZ1NNu/g14cEW+k6TeBxWm6CzhdVG4kxUrFbQ54UGxrZT5+66fq8QAiIiTV7D+lJW0laz5i+fLltXrY3Jg6KPbo2Djb958E8JvImp6P3/qabS+gM6lph3R/NsVHgWVF5ZamWKn4+0TErogoREShs7NzltXLLw+Kba3Mx299zTYBHAImevL0AQeL4nem3kBrgYupqagfWC9pUbr4uz7FrMY8KLa1Mh+/9VVON9DvAH8NdEsakbQF+ArwaUmngE+leYAngB8Cw8CfAL8LEBHngXuBo+l2T4pZjXlQbGtlPn7ra8ZrABHxuRKL1k1TNoC7SjzOw8DDFdXOKratp3tSGyp4UGxrHT5+68uDws8zHhTbWpmP3/ryoPBmZvOMB4U3M7MrcgIwM8spJwAzs5xyAjAzyyn3ArL38X+xWDV8/LQOJwCbxP/FYtXw8dNa3ARkk/i/WKwaPn5aixOATeL/YrFq+PhpLU4ANon/i8Wq4eOntTgB2CTberppX9g2Keb/YrFy+fhpLb4IbJPU4r9Y3AuktVXz+vm/fFqL/wvIampqLxDIPgHed/uNPgm0AL9+84P/C8gawr1AWptfv3ypexOQpA3AV4E24JsR8ZUZVrEWUoteIG5Cqk41+8+9ePKlrglAUhvwNeDTwAhwVNKhiHixnvWwubOko53RaU4W5fYCqcUPiapNIK28frX7r9rXz1pLvZuA1gDDEfHDiPgpsBfYVOc62ByqthdItU0QEyfA0bFxgvdOgAeOj+Zi/Wr3n3vx5Eu9E0AXcLpofiTFbJ7oXd3FfbffSFdHOwK6OtoruoBYbRNEtSfAVl+/2v1X7etnraXpuoFK2gpsBVi+fHmDa2Oz0bu6a9YnjGqbIKo9Abb6+rVowqnm9bPWUu9vAKPAsqL5pSl2WUTsiohCRBQ6OzvrWjlrvGqbIKr9JWqrr+8mHKtEvRPAUWCVpJWSrgI2A4fqXAdrYtU2QVR7Amz19d2EY5Wo+w/BJG0E/pisG+jDEfFfS5X1D8FsNlq5F08t1jcr94dg/iWwmdk8418Cm5nZFTkBmJnllBOAmVlOOQGYmeWUE4CZWU41dS8gSeeA16p4iOuAv61RdeaC61cd1686rl91mrl+vxgRM/6StqkTQLUkDZbTFapRXL/quH7Vcf2q0+z1K4ebgMzMcsoJwMwsp+Z7AtjV6ArMwPWrjutXHdevOs1evxnN62sAZmZW2nz/BmBmZiW0fAKQ9BuSXpD0D5IKU5ZtlzQsaUhST4n1V0o6kso9mv6meq7q+qik59LtR5KeK1HuR5JOpnJ1+zc8SX8oabSojhtLlNuQ9umwpLvrWL+dkl6WdELS45I6SpSr2/6baV9Iujq97sPpOFsxl/WZ8tzLJD0l6cX0HvnCNGV+VdLFotf8D+pVv6I6XPH1UubBtA9PSLq5jnXrLto3z0n6iaQvTinT8H04axHR0jfgHwPdwF8ChaL4DcDzwNXASuAVoG2a9fcBm9P0N4B/U6d6/3fgD0os+xFwXQP25R8C/3GGMm1pX34EuCrt4xvqVL/1wII0fT9wfyP3Xzn7Avhd4BtpejPwaB1fz+uBm9P0h4D/O039fhX4Xr2PtUpeL2Aj8OeAgLXAkQbVsw14k6yPfVPtw9neWv4bQES8FBHTDZi6CdgbEW9HxKvAMNmg9JdJEnAr8FgK7QF657K+Rc97B/CduX6uObAGGI6IH0bET4G9ZPt6zkXE9yPiUpp9mmxEuUYqZ19sIjuuIDvO1qXXf85FxBsR8Wya/jvgJVpzDO5NwCOReRrokHR9A+qxDnglIqr5cWpTafkEcAXlDED/YWCs6KRSr0Hq/xlwJiJOlVgewPclHUtjJNfT76Wv2Q9LWjTN8nL2az38NtmnwunUa/+Vsy8ul0nH2UWy466uUtPTauDINIs/Lul5SX8u6WN1rVhmpterWY65zZT+0NbofTgrTTco/HQk/R/gF6ZZ9KWIOFjv+lxJmXX9HFf+9P/JiBiV9PPAgKSXI+Kv5rp+wEPAvWRvyHvJmql+uxbPW65y9p+kLwGXgG+XeJg523+tSNLPAX8GfDEifjJl8bNkTRp/n675HABW1bmKTf96pWuDnwG2T7O4GfbhrLREAoiIT81itRkHoAd+TPZ1ckH6dDZdmYrMVFdJC4DbgV+5wmOMpvuzkh4na2qoyRui3H0p6U+A702zqJz9Omtl7L/fAn4NWBepAXaax5iz/TdFOftiosxIeu2vITvu6kLSQrKT/7cjYv/U5cUJISKekPR1SddFRN3+46aM12tOj7ky3QY8GxFnpi5ohn04W/O5CegQsDn1wlhJlpGfKS6QTiBPAZ9NoT5grr9RfAp4OSJGplso6YOSPjQxTXbh8wdzXKeJ5y5uV/31Es97FFilrPfUVWRfiw/VqX4bgN8HPhMRb5UoU8/9V86+OER2XEF2nD1ZKnHVWrrWsBt4KSL+qESZX5i4JiFpDdk5oZ4JqpzX6xBwZ+oNtBa4GBFv1KuOSclv7Y3eh1Vp9FXoam9kJ6oR4G3gDNBftOxLZL00hoDbiuJPAEvS9EfIEsMw8F3g6jmu758CvzMltgR4oqg+z6fbC2RNH/Xal98CTgInyN5010+tX5rfSNaj5JU612+YrC34uXT7xtT61Xv/TbcvgHvIkhTAB9JxNZyOs4/UcX99kqw570TRPtsI/M7EMQj8XtpPz5NdWP+n9arflV6vKXUU8LW0j09S1NuvTnX8INkJ/ZqiWNPsw2pu/iWwmVlOzecmIDMzuwInADOznHICMDPLKScAM7OccgIwM8spJwAzs5xyAjAzyyknADOznPr/sRO8GxxPXUAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11365a550>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def f(x):\n",
    "    return x**2\n",
    "def g(x):\n",
    "    return x**2+x\n",
    "def h(x):\n",
    "    return f(g(x))\n",
    "\n",
    "print(\"f(1) equals\",f(1),\"g(1) equals\",g(1),\"h(1) equals\",h(1))\n",
    "\n",
    "x = np.array(range(-10,10))\n",
    "y = np.array([h(i) for i in x])\n",
    "plt.scatter(x,y,)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 逆函數（Inverse Function）\n",
    "\n",
    "給定一個函數$f$，其逆函數 $f^{-1}$ 是一個與 $f$ 進行複合後 $f\\circ f^{-1}(x) = x$ 的特殊函數\n",
    "函數與其反函數圖像一定是關於 $y = x$ 對稱的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1138ce630>,\n",
       " <matplotlib.lines.Line2D at 0x1138cea90>,\n",
       " <matplotlib.lines.Line2D at 0x1138eb7f0>]"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x113b1fba8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def w(x):\n",
    "    return x**2\n",
    "def inv(x):\n",
    "    return np.sqrt(x)\n",
    "x = np.linspace(0,2,100)\n",
    "plt.plot(x,w(x),'r',x,inv(x),'b',x,x,'g-.')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 高階函數（Higher Order Function）\n",
    "\n",
    "我们可以不局限于将数值作为函数的输入和输出，函数本身也可以作为输入和输出，\n",
    "\n",
    "在給出例子之前，插一段話：\n",
    "這裡介紹一下在 `python`中十分重要的一個表達式：`lambda`，`lambda`本身就是一行函數，他們在其他語言中被稱為匿名函數，如果你不想在程序中對一個函數使用兩次，你也許會想到用 `lambda` 表達式，他們和普通函數完全一樣。\n",
    "原型：\n",
    "`lambda` 參數：操作（參數）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "8\n"
     ]
    }
   ],
   "source": [
    "add = lambda x,y: x+y\n",
    "\n",
    "print(add(3,5))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "這裡，我們給出 高階函數 的例子："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "def horizontal_shift(f,H):\n",
    "    return lambda x: f(x-H)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上面定義的函數 `horizontal_shift(f,H)`。接受的輸入是一個函數 $f$ 和一個實數 $H$，然後輸出一個新的函數，新函數是將 $f$ 沿著水平方向平移了距離 $H$ 以後得到的。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x113737278>,\n",
       " <matplotlib.lines.Line2D at 0x113737da0>]"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1138f8048>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(-10,10,1000)\n",
    "shifted_g = horizontal_shift(g,2)\n",
    "plt.plot(x,g(x),'b',x,shifted_g(x),'r')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以高階函數的觀點去看，函數的複合就等於將兩個函數作為輸入給複合函數，然後由其產生一個新的函數作為輸出。所以複合函數又有了新的定義："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "def  composite(f,g):\n",
    "    return lambda x: f(g(x))\n",
    "h3 = composite(f,g)\n",
    "print (sum (h(x) == h3(x)) == len(x))\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 歐拉公式（Euler's Formula）\n",
    "\n",
    "在前面給出了指數函數的多項式形式：$e^x = 1 + \\frac{x}{1!} + \\frac{x^2}{2!} + \\dots = \\sum_{k = 0}^{\\infty}\\frac{x^k}{k!}$ 接下來，我們不僅不去解釋上面的式子是怎麼來的，而且還要喪心病狂地扔給讀者：\n",
    "三角函數：<br>\n",
    "$\\begin{align*} &sin(x) = \\frac{x}{1!}-\\frac{x^3}{3!}+\\frac{x^5}{5!}-\\frac{x^7}{7!}\\dots = \\sum_{k=0}^{\\infty}(-1)^k\\frac{x^{(2k+1)}}{(2k+1)!} \\\\ &cos(x) = \\frac{x^0}{0!}-\\frac{x^2}{2!}+\\frac{x^4}{4!}-\\dots =\\sum_{k=0}^{\\infty}(-1)^k\\frac{x^{2k}}{2k!}\\end{align*}$\n",
    "<br>\n",
    "在中學，我們曾經學過虛數 `i` （Imaginary Number）的概念，這裡我們對其來源和意義暫不討論，只是簡單回顧一下其基本的運算規則：<br>\n",
    "$i^0 = 1, i^1 = i, i^2 = -1 \\dots$\n",
    "將 $ix$ 帶入指數函數的公式中，得：<br>\n",
    "$\\begin{align*}e^{ix} &= \\frac{(ix)^0}{0!} + \\frac{(ix)^1}{1!} + \\frac{(ix)^2}{2!} + \\dots \\\\ &= \\frac{i^0 x^0}{0!} + \\frac{i^1 x^1}{1!} + \\frac{i^2 x^2}{2!} + \\dots \\\\ &= 1\\frac{x^0}{0!} + i\\frac{x^i}{1!} -1\\frac{x^2}{2!} -i\\frac{x^3}{3!} \\dots  \\\\ &=(\\frac{x^0}{0!}-\\frac{x^2}{2!} + \\frac{x^4}{4!} - \\frac{x^6}{6!} + \\dots ) + i(\\frac{x^1}{1!} -\\frac{x^3}{3!} + \\frac{x^5}{5!}-\\frac{x^7}{7!} + \\dots \\\\&cos(x) + isin(x)\\end{align*}$<br>\n",
    "此時，我們便可以獲得著名的歐拉公式：$e^{ix} = cos(x) + isin(x)$ <br>\n",
    "令，$x = \\pi$時，$\\Rightarrow e^{i\\pi} + 1 = 0$<br>\n",
    "歐拉公式在三角函數、圓周率、虛數以及自然指數之間建立的橋樑，在很多領域都扮演著重要的角色。 <br>\n",
    "如果你對偶啦公式的正確性感到疑惑，不妨在`Python`中驗證一下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "import math \n",
    "import numpy as np\n",
    "a = np.sin(x)  \n",
    "b = np.cos(x)\n",
    "x = np.pi \n",
    "# the imaginary number in Numpy is 'j';\n",
    "lhs = math.e**(1j*x)\n",
    "rhs = b + (0+1j)*a\n",
    "if(lhs == rhs):\n",
    "    print(bool(1))\n",
    "else:\n",
    "    print(bool(0))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "這裡給大家介紹一個很好的 `Python` 庫：`sympy`，如名所示，它是符號數學的 `Python` 庫，它的目標是稱為一個全功能的計算機代數系統，同時保證代碼簡潔、易於理解和拓展；<br>\n",
    "所以，我們也可以通過 `sympy` 來展開 $e^x$ 來看看它的結果是什麼🙂"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "I*sin(z) + cos(z)"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import sympy\n",
    "z =sympy.Symbol('z',real = True)\n",
    "sympy.expand(sympy.E**(sympy.I*z),complex = True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "將函數寫成多項式形式有很多的好處，多項式的微分和積分都相對容易。這是就很容易證明這個公式了：<br>\n",
    "$\\frac{d}{dx}e^x = e^x \\frac{d}{dx}sin(x) = cos(x)\\frac{d}{dx}cos(x) = -sin(x)$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "喔，對了，這一章怎麼能沒有圖呢？收尾之前來一發吧： \n",
    "我也不知道这是啥 🤨"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWQAAADuCAYAAAAOR30qAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJzsvXmQHOl53vn7vsyssw80GucAGNwDYC5yZjDDGW+YOsJhi1LE7CpEhiekCIdXqw1RpnxIu7LkcNhk2LI3GGIwluGhxNWKDtGr4JJeyZaopUStacqyZQ8JDDiYi5wZAN0N9H1W1115fd/+kZXZWdVV1VXdjUEDzGdiotHVWXlV5ZNvvu/zPq/QWpMgQYIECe495L3egQQJEiRIECAh5AQJEiTYI0gIOUGCBAn2CBJCTpAgQYI9goSQEyRIkGCPICHkBAkSJNgjSAg5QYIECfYIEkJOkCBBgj2ChJATJEiQYI/AHHD5pK0vQYIECQaH6GehJEJOkCBBgj2ChJATJEiQYI8gIeQECRIk2CNICDlBggQJ9ggSQk6QIEGCPYKEkBMkSJBgjyAh5AQJEiTYI0gIOUGCBAn2CBJCTpAgQYI9goSQEyRIkGCPICHkBAkSJNgjSAg5QYIECfYIBjUXSpCgJ7TW+L4PgGEYCNGXp0qCBAlICDnBLkEphe/7eJ6HbdvR60IIDMOI/pdSIqVECJGQdYIEbUgIOcGOoJTC87woKhZCRISrdeDWGhJ1+/vq9TpjY2OYppkQdYIEJIScYBvQWqOUolarYZrBVygk0pCEw9fiP+NwHIepqSny+TyO47S8R0qJYRgJUSf4gUNCyAn6RkjEYVri9ddf59lnn90WUYbvMQyj4zZ8328h6nDZ9vRHQtQJHiQkhJxgS8SJWCkVRbFa601k6Hkey8vL5HI5stnsJsIN0R5Nx1/vRLBxoo5vd35+nuPHj0cE3Z6nTpDgfkJCyAm6IlRMeJ4XkWD4v2EYLYTqOA63b99mcXGR/fv3s7KyQq1WQylFJpMhn89H/+dyua6E3A3diHpubo6HHnpoE1EDEUF3KigmSLAXkRBygk3oRMRStkrWhRAopWg0GkxNTbG2tsbDDz/MCy+8gOd5EelprWk0GlSrVWq1Gmtra9RqtSglcfPmzRay7hZRd0OnfQu3q7XGdV0cx0mIOsF9gYSQE0TQWlOtVtFaY5pmV7IDqNfr1Ot1XnvtNU6dOsWFCxeiqDdObEIIstks2Wy25f2O4/Dmm28yNjZGtVpldnY2Iup0Or0pog6Lh/2iV+oDgtSK67oALC0tkcvlGBkZSYg6wT1FQsgJ0FrjeR6e5zE9PU06nebYsWMdly2Xy0xMTNBoNDBNk+eff35bhBUS3fj4OOPj4y374jgO1WqVarXK3Nwc1WoV3/dJpVItRJ3P5wfebiflR7VaJZVKAa1EHX9Pu+ojaXpJcDeQEPIPMOLNHEDH3HCIYrHIrVu38H2fM2fOsH//fl555ZVtk1Kvol46nSadTrN///7o9XaiXlhYiP59/fr1KJIOidqyrIH3p1NU3a6lDp8AtNY9Ux8JWSfYDhJC/gFEp2aOkECklCilgICM1tbWmJiYwDRNzp49y+jo6Jbr76S+6LZcv+hG1FeuXOHRRx+NyHlxcZFqtYrneViWtSmi3g5Rx3+273v8hvbuu+9GqRspJaZpJkSdYCAkhPwDgniRKyTcTgQhhMD3fZaWlpicnCSbzXLx4kWGh4d3dX92i5iEEKRSKVKpFGNjYy1/CyPqWq3G0tIS1WoV13UxTbOFpONFyEH3vz31EebclVItLeThsknTS4JeSAj5AUeomCiVSlFhrVfBq1QqsbS0xMGDB3niiSfI5XLb3m4vkhlU9rYddCNq13WjiHp5eZnV1VUKhUJLMTFMf6RSqYGi/V7diUnTS4KtkBDyA4p4M4fv+7z++uu88MILHS9wpRRzc3PcuXOHdDrN0aNHuXDhwra226mFeq/Bsiz27dvHvn37gGCfDxw4wNDQELVajWq1yurqKnfu3MFxHAzD2JT6aCfqftI0/TS9rK+vUyqVePjhhwE65qgT5ceDi4SQHzD00hC3X8S+7zM9Pc3s7CyHDh3i8uXLESHcbewlQgnPk2VZjI6ObsqTe54XRdRra2tMT09j2zaGYUSRdDabjdJC20l/xN+jlIqKq526EyHRUj+oSAj5AUE/zRwhXNflzp07zM/Pc+zYMT70oQ+1mASFOeYEAUzT7ErUYURdKBSo1+tcvXoVKeUmHXUmk+mLLJVSLTfQbhF10vTyYCIh5PscoYY4HkV1I2Lbtrl9+zbLy8ucOHGCF154YVNnXFxlsR0opVhdXcU0TYaGhgbuvLtX2A5hmabJyMgIIyMjHDhwgGq1ylNPPYXv+xFRr6+vMzs7S6PRQErZIs3L5/ObiHqnqQ8IbhQzMzMopTh69CiQEPX9goSQ71NoranVai362V5ddY1Gg2vXrnHy5EnOnTvXddnQNGiQ/Qij6tnZWe7cucPo6GhESu2dd0NDQ+RyuT1F1Lud7zYMg+Hh4U3KlDhRF4tF5ufnqdfrSCnJZrPk83lc1+3Y8dgP4gXF8P1xXXmnppeQmDtJ9BK8/0gI+T5DvJnj2rVrPP300121tdVqlcnJSSqVCoZhdC3qxTFIykIIged5zM3NMTMzw6FDh3j22WeBDaLWWmPbdpSDnZmZoVqtRj4Yt27danm030tEPQjCRpFe6EbUobd0tVqlVCrRaDQoFAoALRF16KC31XbCdcbTUPGf8X2GpOllLyEh5PsEnZo5DMPoSJ6lUomJiQkcx+H06dM89thjfXfV9ZuyCD2Rv/Od73D06FGee+656MbQbjifyWTIZDKbWqSvXLnC6OhoVCwL3eHCaDFORP2Q0E6wU5LZSZQtpWRoaIihoaGoyeTYsWPRVJVqtUqlUmFxcZF6vQ6w6Ry1E3U8F90N/RB12BF58uTJaNmk6eXuISHkPYytmjnaybNQKDAxMQHAmTNnNulv+3kM3ipl4Xked+7cYW5uDiEEly9fJpPJDHxs4YV94MABDhw40LKPoTtcpVKJbDy11hEJDQ0NRSS0G9iNlMV2Ugzd1hMSabw4GEecqKvVKktLSy1EncvloiaVfoi5He2pj5B8w/OUNL3cPSSEvAfRbggPnQs5hmHgeR4rKytMTEyQSqU4f/48IyMjm9bZb16yW8rCdd3I7/j48eO88MILfPe73+14se9Ehxx3h2sn6jgJLS8vR4/5b731Vs9o8f3AbhFyKHnrhV5EHd7M1tfXWV5eZmFhoeVmFj9H/aSH2lUf8Z9xbNX00k7WCVF3RkLIewidJnP0qqjbts0bb7zByMgIjz76KENDQ13X3W+01B51h7PvlpeXI7/j+AX6fjWACCHI5XLkcjkOHjwYvX7lyhVOnz7dMVpsVzRks9mu53I3Uha7HSEPilDFkcvlWF9f58CBA4yNjUU3s3jTS6/hAXGi9n2/L+vTrZpeGo0G3//+93nyySdbCo5J00srEkLeA4hriN98803OnTvXlTyUUiwsLDA1NYVSinPnznHkyJEtt9FvbjhMWdi2zeTkZIvxfDtRDKrIuBsQQmz5WF8ul1lYWKDRaAAbRB2mPvZSymI7KYat1hO/mXVLD7Xn8UOirtfrDA0N4fv+tgqucaIOyTfcdtL0shkJId9DdGrmCL+onbrqZmdnmZ6e5sCBAzzzzDNMTk727V7WLyHbtk25XObatWucihnPd8JebiKJP9YfOnQoer1d0TA/P0+hUKBcLjM8PNxTI9wLuxkhv1/E3is9FCpjSqUShUKB1dXVHQ0PaCf0pOmlMxJCvgfo1cxhGEakpAAi0/jZ2dlNaoZBmji6KTJC1Go1JiYmKJVKA0nk7nWEPCjiioYQ3/ve9zh+/DhCiEgjPDc3FzVztPtYpNPpjsqE+42QuyGujCkUCuzfv5/9+/e3EHWtVttyeECcqD3P23HqI1zPm2++ycMPPxwZXz1IRJ0Q8vuI+GQO6DwPLiRkx3G4c+cOi4uLHDt2jOeff37TF7qdvHtBStlx2Wq1ysTEBNVqlTNnznDp0iWuXLnSt0TufiPkbgiJulszR6VSoVAoMDMz0+JjsZtpD7g7KYudIB7Z9pIwxocHzM/PbyJq2GhMGdSTOtx2+NPzPFKpVF9NL5/73Of4tV/7tW1t814gIeT3AZ0mc3QjPK01t2/fplardc3dhhgkQm5fNj6K6ezZs4yPj0cRb7/kspdTFruFbs0ccR+LtbU11tfXqdfrXLt2bUtnuF54P9Ua/aCf3LEQ3ae8hFani4uL1Go13nzzzR0PD4hH21tpqf/gD/6Af/yP/3Hfx3uvkRDyXUSomHjnnXeiduVuF1utVmNqaorFxUWOHDnCBz7wgb46vwaJkJVSlEolbt26hed5nD17tuUCgsEaJDqlLJRSzM/Po7Xek23SnbAdEoz7WEAw4mpxcZEzZ85EkWLcwrPdFD8k6nbsZmS7F1IfoSe1bdvkcrnIVjQeUfcaHtDpPPWbH2/3qL4fkBDyLqNTM8f6+nrXi75SqTAxMUGtVuPMmTPRI2E/F0G3NEQnuK7Lu+++i2VZHZtGtoN4ykIpxczMTFR0lFK2tEnHdbBDQ0O71tSxVxCeh27OcK7rRqmP5eVlpqamNhFQqGa410Qax3bVFVutp9/hAZ3OUzz10c+5Sgj5BxC9mjnCSDaeAy4Wi0xMTOB5XjQ0VAhBo9Hom2QNw9iUN2tHoVDg1q1bUQrk1KlT2z7GdoT5vNu3bzMzM8ORI0d47rnnEEK0EEsor6pUKlSr1aj7rlqt8vbbb/elFd7r2CrK7ua1HCegpaUl1tbWKJfLm9QMg84D3ImeOQ7f93dtPZ2eCNrRPjwgRHhDC+clfu9739tyeIDneXv+6awdCSHvEP00c8RTC+HQUCklZ86c2fTF64dkQ3SLkMPhpLdu3SKVSnHhwgUWFxd3NSr1fZ9yuczS0hLHjx9v8VQOc+Uh4vKq9qaOkydPtmiFQ/ezeMFsaGhooDzsoLiXjSHtBOQ4DmfOnME0zY6DW7dSM8Sxl3LRnuft6PsX3tBGRkaYnZ3lgx/8YLTeTsMD/vIv/5JXX30Vz/P4sz/7Mx577DGOHTvW9zn5xje+wd//+38f3/f5uZ/7OX7t136t43J/8Ad/wEc/+lGuXr3K5cuXt318IRJC3iY6aYi7FeuklKysrDA/P08mk+HChQtdh4YahhE1MGyFdkLWWkdt1NlstqV7b3l5eVcKcOGUkZmZGSzL4uLFixw+fHjTcv22aYfE276NbsqGkKRDot4r2M1iXDz3Gn+kD1Nh4ZNGJzVDeF52U/WxG8fVb8dfP/sTj9i7pYguXLjAyZMn+cIXvsC3vvUtXn75ZX7mZ36Gl156qa99/cQnPsF/+A//gePHj/Pss8/y4osv8uijj7YsVy6X+dznPseHPvShHR9XdDy7tqYfEIQSn0KhwOjoaEfpWnzZxcVFVldX8TyPxx9/fFNHWTu20gt3WlZrHU2JHhoa6jicdKfG83Eifuihh3j++eeZnJzc0cXa7b29lA2h6VCYX6xWq7z22mstRN0rarxbeD9ap0OiDnXB8ffEi2Szs7PUajWuXLnSMfUxaMS7W4S8W5F2P5/t6Ogop0+f5tKlS3z6058eaBtXrlzh3LlznDlzBoCXXnqJP/qjP9pEyP/kn/wTfvVXf5Xf+I3fGGj9vZAQcp+IN3PYts3Nmzcj7992xIeGjo2NcfjwYQ4fPrwlGcNghTohBJVKhW9/+9uMjo7ygQ98oOtj4XYJ2fd97ty5w+zsbETEccnRTiKxQd/fKRq6evUqjz32WETU8agxnU63EHU3xcde8rLYrjtbu+ysXC7z7LPPtnhRz87ORkXWrTwsdhvvNyFDUKdpj5z7wezsLCdOnIh+P378ON/5zndalvnud7/L9PQ0P/ETP5EQ8vuJTs0cqVRqU54Ugi/dzMxMZNZ++fJlUqkUN2/eHKhQt9WyobQstNp89tlnt7TAHIToobVDsFtjym506u3Go3W3x/uQjCqVSke/5b3oZbFb6wnTZ90aObbysNjt1MduqjUGIeT2Gs1uQCnFL//yL/O7v/u7u77uhJC7oFczRzsRxT2CH3rooZYCFwymF+61bBh53759mwMHDvD4449z+/btvvyIpZR9FQs9z8NxHL797W9z7NixjnP34uvcSRrkbqopepFR3PR9aWmJ9fV13njjjZYi4qBeFruF3SLkXujlYRH3ol5dXY0Gt3aKqAeJ5HczQu53Pdsl5GPHjjE9PR39PjMzw7Fjx6Lfy+Uyb731Fj/8wz8MwMLCAi+++CJf+9rXdlzYSwi5DZ0mc3S7QBzH4fbt25HSoBt5hb7F/aATIceNhcIxSalUaiCJ3FbkGb+pADz33HNbypS6Rcj9Esq98MLoZOP5xhtvcO7cOZRSXb0s4qmPToqPvdTyvN1CXDtRh0ZMly9fbvGiDmWLsPXkkhD3ImWxvr7eknroF88++yw3btxgcnKSY8eO8ZWvfIUvf/nL0d9HR0dZWVmJfv/hH/5hPvOZzyQqi93CVpM52tFoNGg0Grz66qtbtjdDkPtsn7DQDfGiXlhIm52djTS+cS3qTlqnQ4REPD8/H0XE165de1+8LPaSOVFcahdXjfi+37PzLiTqQdJBvbAbEfJuKSNCyVunm1j4916TS9rPz27csAYh5FKptK0I2TRNXn75Zf7G3/gb+L7Pz/7sz/LYY4/xT//pP+Xy5cu8+OKLA6+z723ftTXfB4hriN977z0OHz7MyMhI1y9zODS0XC737YgGg6csPM9jYmKCubk5jh07tikFEmInhBw2dMzPz3P8+HGef/75KILpl2h36mWxlxpAeik+4i3SIeINHYuLixQKBTzPY21trSUHO6iq4X7q0utnxFRcX3716tW+hwb02qdBCHk7RT2AH//xH+fHf/zHW177Z//sn3Vc9j/9p/+0rW10wg8kIYcaYt/3o2giJOZOX464Ec+ZM2d47LHH+Pa3v913NNMvIbuuy9TUFMVikcOHD/fM3w6yXtgg5JCIFxYWuqZZ+iXaTsuFk6QbjUZkc7nVtI57je3sQ3tDx9zcHL7vc+jQoS1VDaHHx90aM6W13pX0wHaJvZMX9dWrV3nmmWeibrtOjUD9eFF7ntf3DMe7VdS7m/iBIuRezRymaW7K866vrzMxMYFSKvJ/CL8k4fL9tINuRZzxMUknTpwgn8/31eI8SGShlKJQKPCd73yHEydOtETE7Rhkukh4zmzbZmJigvX1dU6ePEkmk6FWq2268NrVDXuBkHcDoX64m+tZXNUQjlCCzY/2u3E+drPdeTelcJ28qMPthETdnr+Pd2zm8/nI16IfFIvFXfFseT/xA0HInYi4/QsbEmzYdjwxMYFpmpw9e7bjY88ghNyJ7CEgsampKVZXV1ty0TMzM9s/2DaEw0nn5uawLIvnn39+4Ll63SCEwHEc3nnnHdbW1jh9+jQXL15EKYXrugwNDbVM6wjzsWEFv1wuc/369Ra98HYe83cj73o3dcjdVA3xR/tKpcLCwgK1Wo1XX31105ipTqb43bCbBcbdirR77Xu3RqBOHZvFYpH19fWW6S7dWusTQt5j6McQPoRhGBQKBaanp8nlcly6dKlna+5OpGyNRoPJyUkKhQKnTp3i/Pnzu/74GqY/lpaWOHHiBB/84AcjD42t0E+xzXEc5ufnKRaLXLhwoeeopxDt+dhGo8G5c+cwDCMipfgUikwm00LUd2ua9E6iUmdtnaV/+3Xm//g/4rw3RfGvXubi//m/Ifsgsk452KtXr/LUU09FEeP6+npL63j8sT4konbsZg75XkbanYj6rbfe4uTJk2itqVarm1rrQze4ycnJyPJzO9jKy+ILX/gCn//856N2/t/+7d/e1Mm3HTyQhKy1plKpYNs2+Xy+p2IiHBoazqf7wAc+0NeH2C3q7YSQkGu1GpOTk5RKpSia3O3CVpyI41F3rVbrm3h6RchhemVlZYWxsTGGh4d56KGHWpYZVPbWrbEjroldXl5umSYdPvqGrePvZ4Gw9N23Wf79P2H9v75K4/Y8KI3WChAUvvkKb/zEz/L4V1/GHO3sV7IVtmodD9Met2/fjh7h4zcuz/P2VMpiEGVEP+tKp9OkUqlNhdbw/Ny6dYs/+ZM/YW5ujsuXLzM6OspLL73EL/zCL/S1jX68LH76p3+aj3/84wB87Wtf45d/+Zf5xje+sePje6AIOd7Msb6+TqFQ4MKFC12XDbW94+PjnDt3jnK53PcddRBtsW3blEol3njjDc6cOcOjjz666wQS10R3kuLtVCIXJ/pTp05x7tw5VldXKRQK297nXpF4r8f88DF2fX09kh/GjYfCn/3aVfZD6MpxWPk3X2H+//4TarPLGGmJtCQCTfsR1N69zZv/w/9M/vwhzOEhTv3LTyLT6b73pRt6eS2HhkMLCwusr6/jOA71en1TIXEQgt1rnsrQm9zD8/P000/zm7/5m/zQD/0Qr732Guvr65RKpb630Y+XRfxmUK1Wd+16fiAIuVMzh2VZHVMKnucxMzPD7Owshw8fjtqbQwLvF6ZpbpmyqFQqkeLANE0+9KEP9W2o3e/FoJTivffeY3l5mZMnT3bVRA9iWhQnyjgRt6//XrROtxeG1tbWeOaZZ6Kmjkql0mJXGZrrxAtDg5CM8n0Kv//vWf33X0cIRWZUYRo5fB+8ukvqYAavrPA9hZACKTRohT07j7e8jDFk8P2X/ifO/atPkz5+bOsNbgOWZTE2NhY9YaysrFAsFjl+/HhE1FsNC7ibzRy7Scj9+jzH89ad/JV7oR8vC4DPf/7zfPazn8VxHL71rW/1vf5euK8JOXS56tTMYVlWS6uw67rcuXOHhYWFju3Ng6QgoHeEHB+TFJrPv/LKK33fRcMUR68vXpg6qNfrZDKZLZtTBvGyCNusb926xcLCQtfml90wF9op4qqX9ugx/H6EpBR6NmitW9QN4fTvdtTffJ3Fz3+B+swCytegmudPgGGCMZxCITGzDdyKh1d2gj824TseqqgQYoXv/8zPc/qf/yNGP/zfdT2W3Z6nFyo+OvlYtA8LgEDxEb9x3esc8k5QKpW6WtzuFj7xiU/wiU98gi9/+cv8+q//Ol/60pd2vM77mpDj3hLtX+SQYEMlw8rKSk+516CE3ClCLhaL3Lp1C631jsYkhYTc6ZHbcRwmJydZWVnh1KlTjIyMcPTo0V1TTnieR7FYZGFhgdOnT+/akNVOuNudenEXtHZSiuth6/U6169fb5Hl5QyD1X/5GdzV9eBNnc6BaWIoH9IplO8hU1nctVYva+0r7NU66QM5bv3Kpzj6t/8mR3/h5zru7/vRft1tWECo+KhUKpFUsVQqIaWkWCzuaFjAvSDk9fX1bWuQt/KyaMcg+emtcF8TMvRuCS4Wi1y7dq0vJcN2CDlshw7HJEkpu8rkBkGn9EJIxKurq5w8eTI6noWFha7kHcdWF1C8hTqTyfDII49w9OjRLdd5P7ZOCyFaGhfW19d58sknEUJsOKD95m9iL6+iAS0NpO8TnEIR/JQGND8jwxR4qRTCdsgezVOfrxCPlAHs5RrD58ZY+L/+LdXvvcvp3/h1jExrXvleWnh2UnxMTk5GLdP9DAvo9h3cLUIe5Luyk6aQrbwsAG7cuMH58+cB+PrXvx79e6e47wm5HZVKhcnJSarV6l1rb4bgC1wul7ly5Uo0Jmm3HpHi6QXbtpmcnGRtba3jjWU3jOdDv+Owhfr27dt97+e9TlnsJkJZnvG9t1i78jpSGkFkrBUaAeiomUUjkIAWIBBYKRNPabTnkj02TGOuQnhq0vtz7Ds/QmY0hUiPU1+aZuLv/CInPvVJMg8fj7a/lwyKwvWYptn3sIBw8Gj7sIDdmm03qNPbdgOjfrwsXn75Zb75zW9G+fvdSFfAA0TIpVKJiYmJaCbZ+Pj4QHnbfpcLxyTduHED3/d5+umn+xolNEihzjAM6vU6s7OzERF30/kOUqyLI25c1G48P0hjSKflwsaQdB/Kgr3QqRePTP1Khbl/9X8QsakQoGmNjs0UQvmBukKDbv4n0yau5yFsm/SJEZQtGXtkjOyIQApAa4QUDB8fQds26//7pxj7e/+I9Kmzm/ZjJwiJdKfoFdl2U3yEk0viwwLq9TqpVIp6vR6R9XYM8Qf1sdhJ2/RWXhaf+9zntr3uXrjvCblYLPLee+8B7Np4+05oH5N0/vx5FhYW+p7r1k+hDoKIuFgssrq6yrlz57ZsuBjUeF4pFY1iOnr0aEfjokHMheLLaa2Zn59ncnIyKnqGEVP4f/xC3K2UxW6S+tLLL+MsrwW/GAZmxiR7cBQra+G7iuLkalTca3I0AoECpBTIfSOoeg0jJTj07BH8Wh0UKJrc7roYZjqQwbkexd/+LPt/5Z9jju3fkxHyoOvppCm/desW2WyWdDq9yRC/vXW8V/PP+zEt5F7jvidkz/M4f/78JpF4iEG/VO1RSjgXb3JykpGRkWhMUq1WG4gIexXqoLV7L5vN8tBDD3UcHtqOfqNZpRSO4/DKK69w5MiRrg5y0L+5UEjc4TmamJhg//79PPPMM1GhNVQ5VCoVpqenowsxl8th2zapVIp0Or1tM/jdTHtU/ut/oXT1uww9PIaVTyGERjs24KNdHykE448fo/DOPNrbfH60YSIB0hkOPLIfS2pkPotfD61XNVqDX28g0ymQoJ0685/5FMbP/y9Y2e11lbVjr+mHQ+IdGxvbclhAvPmnfVjAoF7I/Vw/ew33PSEfPHiwazHOsqy+/SZgg9zCNMDCwgJTU1OMjY3x1FNPtbhMbacI2Gn5OBGH3XuTk5N9R31b5b7DBpg7d+6gtd7kqdwJ/U4XAajX69FMv6effppMJhORf7ehnGFF/+bNm1SrVW7cuEGj0djU3DE0NPS+DCvVWkOjSu0b/46hQxZBSOuh/bbPyzBR9SpjjxygPFPCLW0oKrQwkGhAMHbpIdJDCpSPIQVKCrQK/hamPtBBRG1IMFQD+8u/w/xHPkqxVOLq1asdI8d74WVxN4m9l89yJ7OhcH+mp6d7DguAIGWtQGOUAAAgAElEQVTxyCOP7Hjf32/c94TcC4MYAIXLO44TtaUeOHCAZ555pmMudNAiYCc/i4mJCYrF4qY26kE1w93yuOG4p0OHDvHcc89x9erVvghuq5RFaMD03nvvYds2H/rQh1qGq/ZqVQ/XH15QcbKOF4oWFxe5detWy7DS8P+74Wlh/+n/g7uyDIhAQdGBjENVhbIdho7ksIey1OYKaGkgmv161miOoXETAah6HbTCzGdxy7WW1WnXg1wGfA+pFbnaKtm3X8F66oe4ePFiV5vKOEm/H14W96IxJN78E49y5+fnKZVKmKbZcVhAeE6UUvelsRA8AITc68Jvbw7phTCqe/XVVzly5Eg0JqkbBlU3hITcTsSXLl3adAw7MS4KB6BOTU1x8ODBluMIc7ZbRVq9UhaFQoEbN26QTqe5dOkSN2/e7Drpeiu055C7NXfYth2lPeKeFvl8Htu2WVtbY2RkZGB9bIgD69NUr1+P7Re09EN38nH2FakcWBcfonhzEa2C4xm/cAApmo1KqTTasRG+h5FJ4TeclnX49QZmJgVKoR0HefMthvNDiEuXNvkJw+bpJaGXhWVZLU8Ve83LYpBiXC8opRgaGtokx2wfFvDxj3+c+fl5rl+/zl/5K3+Fp59+mp/+6Z/ueztbGQt99rOf5Xd+53cwTZODBw/yr//1v+bkyZM7Pj54AAi5F/pJK8TVBkIIHn300ZY8VzcMeuFrrZmcnIxUIJ2IOIRhGH2PfApvDGFBbWpqivHx8Y43lHDZ7TSRFItFbty4gWEYXLp0ieHh4ZaRV93gK0Wt7uB6PqYhMU0j+Nm80LdKzcSHlbZ7WoSPtIVCgdnZWRzHaZFd9WPlqWtl9k99n/LqGiAQptkzOm6H1A7jjx9j9Xtz7Dt/FMvcWE6YEu1KQGGYBn7wz/jBobRE4AeFwVqd4e9dw3/8KYyzj23aVrfpJXFlw9zcHKurq5RKpRYv4e08WexWpL2bsrdO5vTtwwL+/M//nJdeeolPfvKT0RNGv+jHWOipp56KLFJ/67d+i3/4D/8hX/3qV3d8fPCAE3KYQ+6E+FDPcEzSzZs3d30f6vU6ExMTLC8vc/ToUR555JG+bCoH8Z1YW1vj9u3bUUGtm9xsEOP5cLlyucyNGzfQWnP+/PmW6LWXSsJXCtv2qMWiQt9X2M7G55HKDuMpSbVuYxoGpikx+iQAKSXDw8Ok02nOnDkTRWBxcopP7AjbgttzsvK//TH1yRmiRo7289ODjDFM0BpVq7L/yYfI5Q1QG+dDADKbRTe/g5kjh3FWQ7+UprJZ+8iRMXS5CFrjlSrYf/oVsj/z9xBjBzdtshPalQ2e53H69GmklNG5iLdItxN1L6/l3Sia7uY8vX6JvVwuc+7cuZbaRT/ox1joR37kR6J/P//88/ze7/3eQNvohfuekHt9YUzT3JSyiHtatI+5H7RQ1wv1ep1bt25RLpc5e/Ys+Xwe0zT7+oL3k0MOlQ1TU1NkMpmeRBxf7yDG89evX8d1Xc6dO9cxH9cp16y1plJrUKs3UFtGv0EZrFbfIG0pRRRBG0YwycWQvXPScXSz8mxvC67X6xxZn+bw/DTOSgEpJJjmhl9FtJOwyc4NwDQRsePLjQ2RGclhL21MI9YyuLyEaYLnQr2KmcsEUrjY6lWljJHNohwHXAd3tYDxh18k9TO/hEj15xIXR1iYzmQyPd3yisUis7Ozmzrvwp+7hX4NgbbCIKmPcrncVXnVC/0aC4X44he/yEc+8pGBt9MN9z0h90KckOP2lCdOnOjo0TAoIXdq9qjVakxMTFCpVKL5e0IIZmZmtp0XjiPUQ09MTLBv3z5Onz4duZpthX4IuVarMTU1RalU4sknn+yZvonnmrXWNByXUrmO56vIHxhACoGQAoFAa9V8T/C3dq5TSuMoH9fzEdLA8x2kEFhmEEFbhhwokg73M6zmhzlZXS0i/7/vsHp7Ltp/5ftIHZ4fAYZExvY1gtFKxjKTJpWS4NpYY/twC+tow9o4OimbImSNYRn47Szf3IYQQCqFcj3c5RXEH34R62O/MHCU2ivV0G2MUrygurS0FJkPvf7665uGtg5KrrslTRxE9rZbcwV74fd+7/d49dVX+Yu/+ItdW+d9T8hbFfVKpRLvvvsuKysrPe0pYftStlQq1ZWIQxiGgeM4Pda2gU6ErLVmeXmZW7duMTo6GsnwlpaWKBaLfa23FyGHw0nL5TJHjhwhlUptmUsPj891PYqVeks6IrZU8BTvazZIKJjcorTCICBr5asoBWKaJq6vwG+qGrTGdj3s2MOOlALLMMjkhnFcHykNpOzzwtca+Zd/iG+7NBaDJhBhGMHF0Iza0RotJFqHN5dmikZIJEErdbi13JH9Ud3PkODl8uh4DUAAVgocG+26pMZGcAqtn5lfq2EM58C2kVLgNRyMhWnkn/87zB/9qf6Oq4nt5H47FVSvXLnCxYsXI3IOdeTtbnnbmR69HfRLyDtpFOrXWOib3/wm/+Jf/Av+4i/+oq9gqF/c94TcDY1Gg9nZWQqFAhcvXuxrTFLcMKgfGIZBuVyOxg6dPXt2ExHHl91OhBwS8cTEBMPDw3zwgx9sUTXs1Hg+Ppw0NM8PH+23glKK/PAYS2uV5n7L4Ni1xvNUxyf9AAKlNFIaKC1RKkhfGIZE6ZY0bI9ta2zlkR0apVRzKdddDCmxTBmLpA1kJ5J4+xVEeZXK9FJTHwxCGqA8EAIrm0GmUzilCiBjIgsNhtEk6KDJQ1gmVlQ7DQg7NTZKY2GRlshaEKREPA/tNJCZDKrR6gzn12yk2XQw9F1824W3XkUcPIbxxPNbn5To3Oy8GBeqcbq55XVKAXWS5VmWtWudlP3mkEMv5O3cIPoxFnrttdf4+Z//eb7xjW+0qGB2Aw8EIceLS2ERrVQqceTIEaSUm0YMdcMgEXKoEX333Xc5f/48Bw4c2HKQ46Ajn8KIeGhoiCeffLLjNJNBiT4k5PgopnYd9Fadelprag2HUqVBJjccEa/nayAYFuC6LlIIDMPANI3mZ9RthSBNA9vTMQqTQSuyJCicadX9/c2GDF8pPNvH8k3KXhBOm0ZA0pYpg3/XCsh3r+ArTX1xhdToEJiC9MgwhvCj7AKGhb8/T2W+sCFXk0bQiSeaZCcg99BBpBT4qiknVD7Uqxjj43jLq1FrdfMDAN8HrTEzFk690cLZ2vMgOwRuEBT4lSpGdhzvv3wdMX4E+dCprp9J++ez02h1KwvP9hQQdJblOY5Do9Hgvffea2mf344Mrt8ccqVS2bbRVz/GQr/yK79CpVLhYx/7GAAPP/wwX/va17a1vU3b35W17AFUq1UmJiaoVqtRpNdoNAaeArIVaYYzu0KjlNOnT/dVye1nwggEF1OxWGRtbQ3LsroScYhBIuSwWHfz5k0WFxc5efJkxynUPWfquT7FSgPfV5siH9/zaNjB+HbLsoJJLr6P7bhBVKl1ULQzTQzDjI4XaeC2kHEApXQkcNBNgjZEQJi+Uqi2UDrIVUvcWFuz5ys8X1G3Aa058MofIpWP62hGjo4iAF9rDNn+2WhMA0aOjVEv2TSWC03nt9g2DUkmZyKkRIiwcBXkh6Xy0PkcfrWGZuNmoqWBUArh+ViHDuCuNVMXArRSeDWbVM6CZu3DLRRJjY3i/emXsf7mJxBD/fkz3E1C7oZOsjzHcXjrrbc4ePDgrgyx7ee4isXitgp6IbYyFvrmN7+57XVvhQeCkN99910KhQJnzpxpiVR3q70ZWon47NmzjI+P89577/VNhv1Esqurq9y6dYtUKkUul+OJJ57Ycr2DGM+XSiWWlpb6Mp5vJ1ulNMWqTbnmxOpRErdJzJVyCcM0o4uqU1ElKJwpfBWQdKVaRQiDtO1hpixMaSCNIJpuv+wEoJXGi70ihAgeY5thrfLpMOFuA0M3v4PVKKLSOdTidJAnBpAmWscMgwwjKtpJAfnRNKmR41TmVtCxPHn28HhwrEKCjn+2wd6nR/I0Go0gYkVA6P2hgrZq7dpoU6I9H6GB8LjTedA18F205+HbDkJovK//G8yP/Z0gvXKXsZtNIe0jpmDzENvtyvI64X41FoIHhJBPnz7N+fPnu04N6Redlg/n4tm2zdmzZ9m/f/+2CL8XIa+trUVE/Oijj5LP53nllVd2vF5odXdLp9NcuHCBI0eO9Fxne8qibnsUSg08v5X4lVIgJNWaTSY/gmEYWIYENL7nbSJHIQSGaWBggjRRMg2IZirFx3ZsPK8WpTqkITFk8FNKSTtNaw2GkUJpiecHBG1KEEKD1vjxG5XW5Oa+jzaDsUs6lr8VemO5ZkYZwteamzQtGH34ALVCHWe1CAIywyl0j4hOOw7pI4dpLC63nANhGAH5Kp/MgTHspdUggm7eIJz1dcx9w1APImtVqiBTY7A8j/rL/xfjw/99123uFt4PH4uthti2y/IajQYzMzNbDrHdybSQe40HgpAzmUxHUhr0sS1OsL2IOMROWpwhaEO+efMmlmVx6dKlvq084+jlZRGaCoXubnfu3Blonb7SrJVsGk5gkiOFQGmNUgrbtqPiSZRS0UTpAq0FpmEgRBAVh+QshMTXRrMZLjifhmzK2EyLdLAapNBo38X3XFzfC6JKHexbSNRCGriui+uHqjKNG51igRBGc78hPfs9pPaQ+WHsuQ2C1NJoIWSEaP1dg5YySDMAudEUVv4wnusHxBpTjkRvCP8tJdqxMcb24xfW2k9y4KJcqWDk8/jVDa8LIQTYXpAK0RqEQb3SwMpZqOv/DbtWpfr4hxkaHo707buNveBjEYfjOHz3u99FCBHJ8kKFUzyazuVyO5oWcq/xQBDybiGUpl2/fh3HcaLURDcMEiHHl11fX+fmzZsYhsHFixd3NGmknei11szNzTE1NRWZCoWRRL+mRVJKpJlhdqWG38zTeiqQy9qNOq7TYHhoCNO0qFQrXdYimkU+AIlhCEDg+u3dfZtTDEEHmwCZwkilsCSYMohaXddDKR/X93FrdbS0ggq/YWDEyDo4F0T7MHLnTUR+CI1AFVZiGxOBrCO82UpjIzqOTsjGa0IIUpYmf/phvJXV6Fia4pJg34VozuALpH6mCb5pBc0hbesVGsyMhV8JZYHBfijbxtq/D12tgBAYvoeRGkZon+zUO6Qsk+ljT1Jpy8eGQ1t3GuGGzSU7xW7O08tkMi0StPYhttPT03z605/m+vXrURfnE088wY/92I/17beylY/Ff/7P/5l/8A/+AW+88QZf+cpX+OhHP7orxxbiB4KQ+6k6l8tlbt26RaPR4LHHHuu7UNevTC7Md167dg0hBI888siOCg8h4l4WoSfxVl4WveD7itWyS3rkcETGgcGP02xASZHNBl1cwujfplNpg7obXJgpUwda3hgP9nyvAqdpX4lhYVkWFpJUOni8zaTTaK3xfR/XcbGV3YyymyoPu0JaOwhD0livbrRCN9MGrY0fIas2f5OyNWIG5NAQhgRx5BDu/GJLm4eSRrC2+E3HdbEOjuPMtXkqCIEyTITjYh4+jL20HJNradxSFSuTQruBysNdK5Ae3wcarJkJLmTT8MKLaIgmSVcqlcgkS0oZ5WPD//t1PtxrE6c7aZA7yfK+9KUv8fLLL+P7PpcuXeL111/nr/21v9b3vm7lY/Hwww/zu7/7u3zmM5/Z8TF1wgNByFvJzXrJZUIidl2Xs2fPUqvV+u5/7zdlUSqVuHnzJrZt8+STT+5qwUEIgW3bmzyJO2GrCLlm+yyuu0jAdx2UyuM6Nq7nkkqlyefzLQTq+QppZlAYWKZA+37HdmkhLeruxsXteAIwUNpAKBeZElu2WYfQCnxhRutwXMhlTYQEKY2W/VMq6Ao8MH0VaUjQ4C0vxU6IERBy8z1amrFOvY1l2qN4Y/wAaA+pfMyDB/CWV5rvNzYVI6NzEErh1gITo1hiAy0Cu09pWcE5JOhqRGv87BBClYLxT1rh1V1MC1QN/JnbmFf/DJ77sSgfOz4+zurqKpcvX8b3/Sgf2+4O122KS4i7SaTbwSD7U61W+cAHPsBP/dRP8VM/1X9TTT8+FqdOnQLYdfvXEA8EIfdCaMHZ/qUol8vcvHkTz/M2eTX0q+PcKmURbkMpxdmzZ2k0GgORca/90FqzuroaHcNzzz235WNZN+N5pTWrJY9iNSBrD42WGYqlCrmMuWVuW2uN42nQAssK8p5uM5krjFYybnkfEkUK2zexDDCEj9fM1XaDYRjYXmwJaWH7BkIFuWJLaoRQ0SP7/ulXydvrIMCzXUS92tx28/zCRqQeSztAmF9u8+qwLAw2bmqGAWp0FK9UpnOjoAhSGAQFTc+0wPM2H6PrIg8dxp+fj/YPDd7qKtbYKLpeC85XvQFD45hOHXd1BWEaCOs/wgd/dFMrv2EYHQeU9priEuZiG43GrhkLvd/Evt0c8qA+FncDDwQhb2UwFCfNUqkUGZ+fPXt2k2lOfGrIVugWIYdE3G0b/aDXfqytrXHz5k0ymQxPPvkk169f7ytH1ill0XB8ltY9HC8Y1Om6Lo7toNEMD48iRND0kDIFoFqVC01E0Z4A19PNFyQIk4Yj+kpLuD64GEhhYBmq2bLcFpkaBo0u5A5BKthuRs5gMLr6DsPFO5EkzQk1vwRiZhnlhUGLjdREuFUtRGQ8H77PPHgIoWP6EQ1mPovyFNTbTOiFbJJxE56Ddfgw7uxs862iNVtSKaGHR6FaCf7aZGXfC/4ddEGCVyhi7BsG38MpFEjpt3EwsM88BcDQ0BCO4wRKFSk3XR+9priEDU8rKyu4rsvq6uqOprj0Gls2CN4PQt4LeCAIuRfCCDlMG4TRajeSDAm8H0JuJ/tKpcLNmzd7OqT1G32HZB/fj7AYaJomjz766MCqjDgha61ZqyjWyj6WKXAcO5q+kMvnqFVrsf0UOF5AIGnTDAyC2h/tW44RfFLUHBNTalKGH5BKP/liDbYnAYllgoGP5ysMQ/Yk43YYdpnxuWtBxKuDpwC1trIhnQtbpaOTYyBiWmIdduXF900apFMSHcs7h1G0NTYSPH14LrrpeREiuFkJEBLDrqEOHkYV1jZeb8Kxbcz94/iNxkaVEFB1G+PQEfT6SvCaBtdIk1Ie2nFxbEVq4g2E9qmceJJ8Pk+1slFsNUwzyKUbRvTv9u9gfIrLoUOHSKVSSCk5dOjQllNcwinSnR7j71WEvJ0gqF8fi7uJB4KQexGc7/u8++67pFIpzp49u+WdMyTZfgxDwmXjErleHqxb5bPbl+3kSbyTYmBIyK6nmSt41OxAL1ws2xgSRofz+Kp7RCuaxAyCtBV0HnZcVKYpVRVSKjwEnmNiGRpL+vh+jJgFkZdEJ7heM2qWJr6SQOf8t26x+glwYPZqEN027TSdUg3h+xuRbdPwR0gDbUikBuyYt0TYldfcWS0k5r59SKUIewpD0tVohO9iHD6EO78QbUBIgRASEXXwBUhnMzRK5iY1h9YgygVSRx/CXVyM3mLs28fQxUdIjT6N0F7UQOKZWbyVJfzFOTxpkbr9DvucGouHLmDmc4EviFL4nofveTjRdjSWZQXKlOb/7dawYWTbzxSXeFNHu5fFbpnTD0Ls242Q+/GxuNt4IAi5E4rFIrdu3aJarXL06FHOnTvX1/sGkbLZtk2pVOLtt9+OiHgnBcY4pJSUy2XeeecdXNfl/PnzO34ME0LikmZyycVxfWy7gRCSXLO7zvGDnKhp9Op3AxDYLghhBA0gYdSvoe5o1qt1DBm4pqlmTlg2H5/TJmRSIjAU6pktDqA12P5GES9jKSzhN70jOr9HOlWGqnNoJEJ7EYFaRw4FxT0rhYyN7lDNYp5ba+AX1oPjiXqdw5VKzJEhdDOqjhfwNAIlAq2yeuhh/Onb+Mpr003LDUe6eo30iYex70y1HivBOZG+E5C4aZJ//FFyB0cRUkA6DbYf3SRM7WAcPYo4dCDogHRcmLvNQc/FTT+JTg8hEUhpgmh61AkDTylc3w98NWKIyNkwenoYbzXFpVKpUCgUmJ6eplQqRZ1z8Yh6UJL2PK+nhUAc5XJ5W4Xzfnwsrl69yk/+5E9SKBT44z/+Yz75yU/y9ttvD7wtIcTHgY83fx0FprTWP/LAEXKxWIwmf5w7d45yuTzQMNJ+CLlWq0Vkb1kWzz333EBpiK1Qq9UolUrUajUuXrzYl+pjq1SI52tW6xnqSmGXKwghyWQykWY3RHCdCjzPxzTiWuJO2wSMDAgD5bsUijV8Y4RcLh0jy0B3rJSP7yvqjqJS98FvkDI0hhlMdZGGDEzi2yAMA8feOK6GK2kgMSRkTL+jjO/g7NXmo72PEhLfzJAS65AOJF9aypYpIEIERJgayqJyWeq2Rq+tbHTtSQmpNBqJL1NBZC+MJtEHBkiO3SCXyzCEh3fmHP7cDKBRSuM3jz0YeRXcSKTdwEllMOrVWJ63KTOsV8k+/gT5wyNIM/b5NKro7DDCDgqTKBXJ9qQhEfk89vknqM3NsG/hJu7Bh3Hy+9EE+xBkOxSGEAgjiNqVDnxBhBD4vo/v+zhAOp1GA8VSqTnNxYwIu9v3LJziEi8ivvXWW5w4cQKlVN9TXDphkJSFUmrbyo6tfCyeffZZZmZmtrXuOLTWXwC+IISwgG8Bn4UHJEIWQrC+vs6tW7cQQnDu3LnoDlmv1wey1OxFyOEUkEqlwtmzZzlw4ACvvPJK39XorQg57kmcz+f7Ni4K0xvdoo5iTTG94lGtefjaYCidI58xcNzueeBAHSHIpgSe1yNfjKZSqeO4Cpk5RM4KXN2CglzYNCEwDJPW3cvhOC6uW0EKD+Wo6KYipWxe/JKam+oYR/sKqo5BXWWxlEXGBFBg18hXZtHSQHkKkR+GNr/oIFccaIB9I40SVrC8CEhKZMEefQi7VMMqLiAAdfg0hqhHRT5BwNOWEfxmxzr2TNVA7x9Hra02Hetky5UW3qB0NotdKqD8oKCqlcYRDqmjp8kdG0NY6cj5Ldp3uxqMjgrn/jkNdG4E4TYQysNAkTp8GJ3OYlXXMe0K3vA4rpFGCxNtmCit8V1vI9IWwdMOIjg6zw+sU+Mkbce8vAOCTiGbFqdGh8Jh9Dk1m1bS6XRfU1zinXpxC89+nyy11rtm9/k+4XPAt7TWfwwPCCGH3Wnnz5/flF8dZPI0dCbkuKVnL8/jrdCNkDt5Eg9iXBTqi9sJ2fUUM6seK0UH3/eDqcyeQBoGdRdSRuBS5veIghtOYGFpCB01ikAQhTTsBkopUukcSo7gKYFyNfm0H6gteiIgKt/MI9IphiyF7wU+wyEJlOsKTwW5yeixv5n6iPscO77EU0FK48TstUCva2SRQ8HUDtnY8Hb2zTS+kcYzgog36rBrrk4ELj+khUt6n4k9chpvdYWMoSKjZgFYJp29liFo3MimsVNpcDYHA+ENKqtc0ucu4MzcAQ21eg3jyDHyZ47h2DZ23SGlHQxpbqQ+tAGpbND1F9ql1kobpOy5aC0ho9GZDNpIY9WKwXcvPYQijacFEoGQFlpIPBVMSwlhANpzMaxgfJYfO25hmLiewvHsluMJZyIGhcMNku7lZdHJwjOcXFKtVlleXmZychLP83AcJ/K5CLXTnVIqG52TO5fs3W0IIf42cBL4xfC1B4KQhRA89thjHe+MOzEYajQaTExMUCwWI6LcyQfdbsHpOA6Tk5Osrq5u8iQeZNBpu5xNa81S0ePOYh3XqZPJjZLJZgJ7x1j7ruMDBFGw2yNa9nzwhCBjCWzHw7HtZuSTxvMVFTcfybs8JSjWDPJpHT2e94TWaC2oOQamlKSNIHo1rQyelJG3hVIK5ft4nofy/SCabh53WDgylcO+8m28VB5pBV9tv1zF8H20YeJYw/hGqoOvcrxNY2OHBZA1XOxTp4MccXEeIxYV94TnkDp6FOf2ZM9lZaOMyA2haxXUvv0ceOJCkOcGsoBKj6MrBVQz5WErG2o1HCtDTiqkbJJfo4q2UoBHSjkIOYr2PYRu4KfzQWOJ52B6DlIaaDODr4KbrCkEwgjI2dfBfUc271TaczENK1COELt7xU6i1hrX83Bjl1lI0rncUPCEJfyekXSIbkXE1157jbGxMWzbZnV1dZMzXOgKp5Ta1XmAdwtCiGeA/xX4q1pvVHcfCEKG4AvQiZB7TZ7uBNM0qVarfP/732d9fZ3Tp09z6dKlrl+kTnP1uiE0qXddl6mpKZaWljh16lTHaSbbNS4q1zxuzFSpu4J0OkV+ZIiMBZ7S+HQ2ia87gcGPJXUsZxzmNJuKAq1ZL9u4jSpD+TyZbAYQlG2BkRKt6QghqDQMUqYkbfp9TQCBgMw9ZWJJje22ysZCA6JQ0Ro2dtTr9UhJcHTxL/FTGchkwQ9uPH6jgZcawTWzRJ0fbUcY75wL/yzEhj+zyGTJ6hri8FHMtf5HyotGBfPESbzpHqZOvk/6wH6cUop9Z04ExbsYpF2F7BCG02BDzavJaIGHifIcXNdF1+vY0iJtSJACs1KAoTFQPtKuoDLD4PuodL6ZS9YI1yYlJX6zBqA1GEJimCYl1yGbz6NodlG2nTcpBbI57irwDFEt10hI0rn8EJXmUFchBIYUWJaFYchmAXFrkg6v7YMHD7ZE23FnuLDI9qUvfYlqtcrf/bt/lyeffJKPfOQjHD9+vI9Pa2sfC9u2+Vt/629x7do1xsfH+epXvxp17m0DvwjsB/68efyvaq1/7oEh5G7oNHm6G2zbZn5+nkKhwKVLl1oi1l7rD12ntoIQgvn5eW7evNl10GqIfo2AwmVtx2NyfoWibZFKpRka2tifhhuY81gm1LusIxhhF0TBnqcIa0xagOPYuI4bOGuNjmPIQIlRtjP42HSrl9uewPVNhtM+XpdouZ2rtYb1etDdN5LxMWXnUVACIt+HVCqF6TscECVkOoNWgbzN8QSuzAaiOA3NTovWlXRad9ivIcCzsuRFHavZGCb9ArAAACAASURBVKMOPgTLc12OeDMMt4bafwC1ttJ9IafB0OXL2KWVzk8Um14MuhJT6Sw4G3/PaU1Zm5gqIGl/dYG6TJNJmciGjcoMYaoSMpXFlwYYBr4ZPOUgJUKaKMD3NaYZtHEbUgT+y80GoahpRmv8mG7bkDRnGjbtV/3NSp3ALRDqjdbZkkZzyrhpBnUDy9xcOOzkrdHuDPdLv/RL/PW//tf5zGc+w8c+9jHefPNNCoVCX4Tcj4/FF7/4RcbGxrh58yZf+cpX+NVf/VW++tWvbrnuTtBa/4+dXv+BIOStIuR46uDQoUNYlsXRo0f7Wn8/kazv+0xPT3Pnzh3GxsZ4/vnnt5T99Bshu56i6ud5e1aTSuXZvy/VlIi1wlOgfYnyGmid65pKaLiQTQVffMd1cR0Hy7LID+UjmZqvwPY6b6cdWkOpYZBLadp1xN3IJ2y1LjUMBAYjWR8peqdvTq3+V6QhAzMgz8VNDVF0LXKiFktGtJFE7JdoGRH8Ifzd3DeGJTb0yRIPdfgYLM723J/4NqxsCjuVAafRcQHr3AUMQ+Ni0PEu4dpBjrhWan3drqFzw4hGNdr5jNfATWXJmsE5zAmJl8qiPBfRqFDBxKjX0Qh8M4OVTiENE5HKoTwnSDUIiec0kPlsU6wSmvfrQJUjZYs6I0SQNtvofpRC4HkOhjEUSC5dv2OA4/sK31c4rkcum8IyO18b/U4LOXjwIB/+8If58Ic/vOXyIfrxsfijP/ojPvWpTwHw0Y9+lF/8xV/clXFZcTwwhNxLitOt6hon4lOnTvHII49Ek0H6RS/CV0oxMzPD9PR0pIXuV+BuGEbPyN5Xmlsz6yyVgNQhMpk0lmnR8CCXgoatN13bQgi0zGCGJvIdcgkaKFU9GrUq2fwwuXx+c/FKGMwXgwjc8BzoozW25ggs0wikai3dGW3brpubXivWg5bqkazX1soc4GDxHXJeQFZag50ew5UpMtWZTetq2bKIv7ihOxZodJNQ0tLZFMZL5aIOH4fFPuVPnkPq6JGO+WTj+CnMXBq0Rpndz6NoVIJintP6jCPq1cA93w+/K7r5meRAK4RWmJ6DSmVAKVJodGYY33ODad6eh+v56EYd19f4RopUKkXKEODaWFYaLWUwsovm4IJmvcKEKHoO1Rnt16HWNIvGfkDSTV9tCLon/eZ70mmLfDa9Y9Oe7U4L6cfHIr5MmOteXV1t0WLvFA8MIQ+CXjncQYuAnSJZpRTz8/NMTU1x+PDhyJN4YWEBx3G6rGnr9UIQEd9eqLBUcLEsg9zQMI69sU5BkBNOWaKpgW1bgQbHC8g5bYIbU1h4XtAsIqXEzAR6Yq3bcppSMrW60cVYdbNkMv1ZabqewPNNhjN+55uBlrh+55UoDeu1oBV7OK0QMthm2q9xqDEZFKCkQcMcCX7WNFnlEhLgpug4XsPTzZYMsZFNFmjcbA6qlQ05XsxzWWobffQEen6afhDkk0/hTd/eeC03hHV4Q2GQEho9NIaodJkD2enUaBW0gXtOQIwaDOUHjSt+ID0Uvot0JcpMBSTdqGBk8ghfkQu6dlBWLphhqBWeUtQcGykljeZkFSklGCaGmULGSFjHvqOmACkMFAKkgeP6WKnWjlelFPGvZMoyyOUyWD0kbYNEofezjwU8QITczwcWJ+KTJ092zOHuRJWhtWZhYYHJycmOnsQ7GfnUcDV3FmuslDykNMkOBbKfbArWOnC84wXRSNrU2B02qXWQ402bgcGQ3WwbzmSygf63Vsd2Bdm0RKuA/KQUTBeCYl4EAcWGyfhIkMoIP4ZudTytg4h3OOO3FRg167Wtv46eEhTqgXlQ1lJcKL+G1E5AwqlRdNOBQtbW6cxgzVd165/jXx8pIG2BHNsHbqO534E0LJhs7TQfz2s4uVEy68tNtUhv4jDcKmr8IGo1mFhinT2/qYgnnDo6O4KolzavwLXRuVFErVVXjV2D3Ag0AlMihAjSGJmhJlGD8Gyk9lGpHCgf0ahiWGl8YYLykLaHtLL4UgZzBE3IZyy0mcL1A/c83/dRTh3X93E8H2GYWKkUhmEGag/TxMfAV36wDRTK9zAN2dReb9wUDSnJ5TKkLHPLa3cQb+btEnI/PhbhMsePH8fzPIrFYs8BFtvBA0PIvSCE4MaNGywtLfHwww/3LKYNom6AjaJhaA6/b98+nnnmmY5eGIOsW0qJ5ysKVcVSwWa9VEULi2w2F0QoTdQdMEVzSCatj7xKQUMJslbQ0tz+vfd9RaHWAL9BJjeMGcvdhblUx9vQIc8XM/iq88VTrElGss3xTo6N5wbRqRDEIsum+xhQaRiYwg9GMwGub/atxggxVrpBjgZaGzRSI2iCqn+ZYcyMSzU9TOj7ALHoV2hkvUy6sd6yPoFukrGG3HBExsH5EIExT/wNWpNRisahY+iZCer1WnTjkjIoUEXt0oggn5wxsdMZjKPHMTJdUhTaC9IQ7RNGANEoQzoLdlt5tlZEZ0fAtonuNI0KZIeD5hIBwvcwGhX8bOAUh2tjCAeVHkL7Lrh1DAQ6lQs8RpSPcOqkhAAzhW+akW91ToPWwURv23WxPRuNwDTM5gxEA9mUvm185zWmYZBOp8mkU31Hvf02hUBAyPHUQ7/ox8fixRdf5Etf+hIvvPACv//7v8+P/uiP7rre+YEh5E4nxvM8bt++TaVS4fDhwz2JuNd6uiGUXc3OzjI+Ps4HP/jBnjaY/RCy1pq6oyk00lTlUf5/9t48xpLsOu/83XtjeWtmVmbt1V3dXV1LVy9kc2uSskxwQHvEEQVZlAQTA5DWH/RgbBiGxkPLIGAbA8gQ2LYg+w8bGsO2MJRsjwUKsk3AEEYDUxJEidRQpMwmqV5q37fMqsx8ayx3mT9uRGS8zJeZL6uLbbrkA1R3VeZ7EfHiRXz3xDnf953zN4Y452i0uoSBnxGXbLpPHQHgiENHmm89/nEOcSTIMlftI01TjNHEcYOo1SIK3ET5op4+GitY7oXkdoq0uQAaHKys5Ti9zly3Q6vkgjo/bNRaW5H7gUou7Iyg0bCsj2ebZFFGZMY8nb3hM/1oDickAzWPCAJkktCKa0rBiXNV/DtqM27P4UYjWonPWEswFgjozEO+HSel/PC+jNFSsLJ4mMVsSCmXttZn0xNyaalQKoPDR1FL22dxwlpc3EbotekvmMIFBoEY98lkSLPeAB33C1AuHeQsatTDtuY9CLtCOBO3MIW6UmRDVJ6g5JzPdh0evAEVhFih0ChE1EQYSwOoj0Qw1qK1Icvzyt9CCIGzhrgRF0272b/vd8J6cxYfi89+9rN85jOfqXxrfv3Xf33P+9n1OB75Fn8AQmvNtWvXuHXrFk8++SQHDhzg4MGDj9Tlv/QkttZy5MgRTp06tet7dgLkNHf0Rpbe2JJmhvFoQJ4L2p1mlbnaokHSimGc1rkA4Jzw0zMixzDdurCkuQebvnMMh0OfpRSTRazzFLFQeb7yxjY9eC33Ah70FZ2GY5oLuzaaJE0Iw5CotR8VgMRg2RAIoFTV/CuFHlprtJNcujHA2j5xq1PxU6WUO35fZ4dfAyFJgxapapOHHWKZoY2mqSdrsNsl3s3AIOYj8u4TiCyjlS77J41AIfTscnucoxUKWHwS7lyv5NL1m8tRlDyMJevOM9CSVj6sPqdSqnTW9JS+PNm+nqwzaLRh1N9SuA90im11UDVKGuO+Z2lkY0o+oxytFaBc1LPSEUoF2NDTBqUAkQ4IVIgNYr/IRE2MUJjiICW+9KDNJHtCSYmKJIGSpGnKwuI+BFSc4eV79xiPxwghJnyWS5n0lo+7B0Du9XoPXUPezcei0WjwG7/xGw+17VnjsQJkYwzXrl3j5s2bPPHEE3z4wx9GKVVNqH0Usba2xvnz5wnDkOeff55+v894vEsmVcRmQNbG0R9pRpmjN/L1tTJzjeIWiIxuUzHKNmqTAg/eUUDFtfXEeZ8VjTNohL5ZZ4uGnMORZzmDQYbVY+YWDm4pX1gHuRWEkhpn2LE6DHnQ9wvCIIGFtiW3XnKstSbLM5RUxXgnv9FRBs1QIOV0KBRQTJkOsDolE/tBQVPkSFnMxiuyq7q3hSwc044kF+jQZxAsMooWaKoMiX9U19nO9LjNy4kUEElLaz5AcBSrjefk6mkUtZ1DmhR78Bjc20qJE3i5tDx8jHBfARhyAQYPCqA2OGcZFdmklBKZ54ggJpy2OKQjXHseMVyfBGVnkTqHKK4xL9iQV1egDHK0jm3OeVAWwo+RMgNM1MY4gWnMYWSIFdIv/lKhzYYXtCnuKSWoLEY3g3OaZbQLl7ZWqzXBSDDGVO5wdZl03Wu50+mQ5/nM7nC9Xu+Rjkh7p+OxAeQ0Tfn617/OsWPH+NCHPjSxou5FHAIbUuR6htbr9Th//jxCiIlJ0ePxeG+Tp42lN9L0x4Yks5XizOZjxklG3Jyj0Wh4pVOek2tLKxLkxnOJy/B/99nyWj759JppiALItCPLNWmaEoSBNy4fQjMWJNlWsLQWcicoS8lrA8GD0eSNsDYUzDUyBmP/mb3qaiuRf5RJWpFFbQPKZfSHGx+qn4TEoWNfx2GK5pwrqFHWGrIsR5l1juvXWWk/SRhAs3L59Zae7XwbhsKUkKVQxGYIIsAhQontLGHHA+Tm5tk2Ue8PSpdjDxyB5dtbXxhGMF8zTrc5ojVPWHhtaK1pt9veTL+YHJ1mGUkyRmGrBamsTYtk4EG5zk92eAc450AGEyb8U0F53MM2C0l5GGNlSO4EWUMSq9gnEGUJxBqUkAglvUikZArWuMqBFIRxg7jRYGVlZcenHKUUc3NzE/4zm72Wl5eX6fV61f2wWzb9sOb0Pyjx2AByo9GoMuLN8TDy6TzPieO4mgJSzt7b/DhUyqF3Cl8XNgxGmsb8UXqjnDT3F3SWZWR5ThxFLCw0CQNv9pLpDZDNtQPhaEWCUcpERpTmjoYyjDYlhqNEk456iKhFq93asLYUMMr8tqaCsvM147We4UHSof6kaK0lTVOGQ8eR/QFWxJ5ytw3mjlJJp2FBuC2ZKUAgHKujBvWye5oL7q4KDixYLL7O7Es2/nt9fvDH9LtPEMu6dweAI00hxm4czy7tAC9eAOtyypqma82DznBhhN13GLF2d8tcvd1CYnBLh3D370783B1+akvJxwlfCpA1frEUAlmc+Ahw3QXE4AHWeQGF9/PIsM4hxyN00KRpMy+Moagz6QyiBjhJ3QhfjHq49jxYg407mLCBlgHIACsDnDVYZwmkAJ0RKO+CZ42patBOWyQgVOAFJsYilSJuNIjiRpEtP9y0kGley7du3UJrzcLCwrbZdBiG3L9//7/T3n5QwjtoTf/yH4bK1u/3eeutt0iSZMcpIJsNg+qRa0N/pBkkpppFJ1VAlht0ljEaDWg023Ta7Qpk84I72ooEw34GlM0xyHJHHIK1groXkEESkAAxxljSJEFISbOzQCuWjGq0uLIJN86gEbCFEicELK8p7vUaBNHmJqAf3RMEAb0xLM1ZsozNDN+JGKSSTmxwYis+DrepCjjg3ppnbTSaVFzoxew6NFtEym7uZ2GtoFVrghUY7ZkVtXJPGWV2HIeOcb7xHidVJXxw1uD2HUYOVhFTVXaTxzDxT+lw+w7Aqm8YMr8EjSlTaJzDqRCrtr8+RT7GdReR/QfIUFFn0zjn6WipilDpCKMNiU28M1yW4RptorIJKAS2vUDe6HresbMbq741CGuQYVQ0XotylzEIDIEKPDDXTayMRoWRZ+hE8VS586Ma3xSG4Y7Z9KVLl/jCF77A1atX+chHPsILL7zAT/7kT/JjP/Zje9rXgwcP+NSnPsWVK1d4+umn+dKXvjQ14/74xz/OH/3RH/HDP/zD/Kf/9J/e9mcs4/szy/q/UmzHkNiLBed4PK7A+OjRo3zgAx/Y0ZN4M9g75xinOcurQ+6sDBgnKaG0KAnOOpyzDAuxwfzCIo04Jg4hDphQFObGEQaSZo0tAMWQB2GJJpZSgXGKdLRGmiY0mg2axRSQJId2PLntEkBTI4hrT31SwPV7AbdXJakOCFxGmmUMh0Ok8nXieilodSBQ7L7QDVI1YdwDoKRjeX3nm7U3FjxYB2kt0qUsBeuEahL8y21muSBweXk6SvyZeJpwBR2kPBcSjTW1767Z3Uo1Mxrbmsd2d+Cbuk2k5iJkKD0QS4Hbf3h75Ywz2LjFTvO2ReZBebM7lBCSIAhoh5LGwiJKKZrNZvU470Z9VsY5d3XASnM/60Gb1AqMTgs7zcnvwOUZwmqfQNSvGaMROiWQAiElYaNJa2GJ1vwiYdzYRhL9/Z2nV2bT+/fv55VXXuHf//t/z7Fjx/jd3/1d/sbf+BsPNQ/v1Vdf5WMf+xjnz5/nYx/7GK+++urU1/3cz/0c//pf/+s9b3+3eGwy5J1ilgy5brXZbrc5fvz4TJLIslFnjGWU5AzG2YShe0mB0jpnPBphspx9+w9OMCR0IaeLA9+gS/KNJl6urTf8sQJdJOLOghP+56PUm/9obWi1OrQaAeNNPaBx5kF5lDGBG6U4JAwcxgjO3VQVbc5aw/K6Zf98StyZHCO/8dlgmEua8e7c6n7iPSlsIR4ZJWJ7gKqFNoKVdc3L3Su0glKksflAHHE2RUhRiw29HkjpkNKh8PQs7xo2JLUBjVBWtdoN/rDFSYFdPIpYu4OY0RYV55CNED1/upjQsUOYnDRq08Gy3WirEpRF/8HWc+ecn0ItFE0hUNIPBDBzB2g3uhBGmMK61NiiaerGgMAKRRwoZBD4ZqtzxNKb/li30TAWKiBotGg0Wl4yvUs8ynl6e5kA0mq1eN/73vdQ+/ryl7/M7/3e7wHwMz/zM3z0ox/lH/7Df7jldR/72Meq1z3K+DMByDvVkOt+FidOnODs2bNcvHhxZi9ihCRsdLh7v+dlq0oShRJjHNpYjDUkSYqSkk53jtFoiMJPUUZI0nzDc8LLiQ2NUNYnDHnWA4ZmJBkVlDZnHYNxQpoMCZrzgK+1ZtrRigWjdFLLPM6gGTlGI7FFpTYYCa4tKzIt0FoXE1a8i1pORDdwpNsYCRkrSVNNHMFuZ6w3Vsw3DeC4u6bYnpBWO71oXp67zILsg5v+jkQrum7nkoItT4fzkz4aIQhCwE+jaOw7QIioRk1t8IdF1URT1iLmD6JGPUQ6qra946cIIuzcgq+5ZqNtX+aAWIHtLCEH9x8OlAu6mgsiCGOy7n5sCYgm93S0oEFgJ5/orLHk1pGnaaU4BEhHQ/+5m13Cdhe1TSa8XbzTE6eTJNlRBzBL3L17tzIWO3z4MHfv3t3lHY82HitA3s4TeRrLYrOfxenTp6uLbRZWRprlDMcZoySj0exUKrMy2zVGezqcc3S7XS/pdVBmacZ4Z6xQ+hs+M0xuw4HTY6Ro+ywFyI2lGUFvmJNlmiiOmFtYIpCW1f7GTZYWoDxMJ6W8SYb3YMDXMq0VXLolGGeSVpgxGGiUEjSbTYw2njtrIc9ByCmZabU/iRQWU9Dhypg2DXp9rAhdRtmk23ncjuE9c5dZkL1qK1XJE8VYNtEiIAwSBp0jOOftHXEgnJ8+4qwl1Akt45kMUjqiYEqTMW4hc+/fUL/36/MAsyzDjhO/8LjQ84iVRGwLn5DPHfTJqwAZt72/8bYhQKfY9iJquD1bpALlKRxliUPvO4IOG+A2Pbk4CyZHhDEuT72KUQg/4QOAEBFEZOMR2lqMirg/zllfuUVWuP51Oh263e6OUzvK2Gtmu13Mmmmvra3NNJH9L/yFv8CdO1t9rX/hF35h4t+lves7GY8VIG8X9ZJFqd67c+fOtjLq7UocznkaWX+YkOXaG6YHCmNyyrTTWlMZsrSaLWRxIUkcQSBxJgPXqrIb5xxae5JXFCiME76xJ0CFMRJLFCiS3JLnmkGWEYUB7YU2uS4bgQJpx/gZE/5nqXa0p4AyIsDklptrIetD36RJkhFD5ziyFDLMPdvACFOlfqMM9nUco0xsW2VYGwr2zzkSLfxkizT12aiSEzziSMH3zmuePAyJ2+nyM7zcvcKiWoOiqZfQIFUNhBREUhM60LmjKRLKhW6qP0UUM6SNzh0LbpVATmbTmQiI82TyzdU2ps0D9FllqtuEa3e8x4OzjMfjSiKupMTNH8CWj/bOu5vR6CCTwdaPW1+YTIbpLO6eKW8WjoQRg7l5uqFfcEUQwxYOs4M8QQZRMbbJTfzOmYxEhiRInjh2nHo7K8sy+v0+g8FgYmpHu92uQLpOR3unM+RZGRb/+T//521/d+jQIW7fvs2RI0e4ffv2xHipdyIeK0DeqamXZRlXrlypRCM7eRIHQTAxGNU5R5ptAHEZZTasVICzlvF4hNaabrdb1NjqDSWf4QZhiBC2cLcS5LV6s9aeWhQHAcYJ0szQImQ0Sun3+4Rxk2ZzH0r5KQ5K+axaOYtD0QzZkFULz11uRL7hlWSCB33JzeUmraZXlSTJGK39EMogCBik0Iw3tlHHiNUB7J+zDNLJxat+zu+uGgLXQ4bNamS75xEX04yzjDv31xmOIs5flRw9IHBump+D5V3dqxwIHqCdYqTmCJRDYmkUnsoO/9mbdujLvFsS7cm6TCQ0jQbEUYc82IfUOXK0ijCGPNhkmLRreMl0UynE0RMED+6Qj4dEcYy1BmsMSW5Ic4d0o42SR2F7SqM7MeevttmN0GlRvniw7ZGJbIxrLyCGa7jWHEl7CVmJlPz4JRE0cHmyteSsM4RUOFFylQWqNYdqL5DeucOUAeBEUcTS0tKEoY4xhtFoRL/f30JHG41GrK76BWOnidK7xayZ9sNab9aj9Kv4/Oc/z6/+6q/yl/7SX3pb29trPFaAPC1KT+J+v8/hw4dnMocvM2QPxDmDUYKzrpACT978zlmc82Acxw3abX9KhcBPWxDCa/uNz1QFvqxSgnkQKAQSi6enOUTl4y6EZOX+GiLs0OgeQhYd7gdDr4oC70q23JcMB7BmWsSBY7XPhFFPJ3Ys1zQOo7EmcAOknKPT2QAjW9LEqofwyarwg76g297ql2ELTw/nHGG7S6cVoq2vRdYl0IGwXL8FzaYH6VvLhm5jFahPmxa8f991DgarDMQcKhTERba+QcaioAEKutuwPKqbv4bLUVA8LRiNFQLbXsTJALF6f7tLYddwJsfMLfnmq6SaMC2XjhGqCOdKp7RJLw/jBG2yjWyaKUuCTrGdfcjhelGCmRLZmHz/cTKhKv7vxkkAZzJEEPnyhd1Uwigc2WRrHtVZQKhiDmExEHeWUErR7XYroRRs0NFee+21apL6eDxGFUydsuyxmbWzXcw6Im1tbe1tc5A///nP85f/8l/mV37lV3jqqaf40pe+BMA3v/lN/vk//+f8q3/1rwD483/+z/Pmm28yGAx44okn+JVf+RV+5Ed+5G3tGx5jQLbWcuvWLa5evcqhQ4dot9s888wzM71XKYV1gpXVHnm+lUGgCnL/YDgkz3JEIR2eyIjdRgYNXsGklGRkNbgGUoXk2uErI76ZFymBVJJRYhiNfQYz127RiEO0hUT7LHu+6Ui0JM0laQ77O5bRwO8r1b50cK8GwINUMNey3F/TaJ0TBCFhaz/7W44H/UkYGCSCpa5jZQppwTrIMm+/61lRjizzE62bzSZB4B3b6jzWeoxHuvDFEQRBgFIBa0PDs/tDrAwxRvPe+St0o5RhME+A9QuEY0s12lhJ2xVZ5g5laFcYckoJ0ZR12IYxotlBd+ZQyWBvHhbVRgyi3cXGMbK3gmt5yTH4RdX7c0welbGWzEQESY/U2KKW7oGsBGkhJUJn2NYcIhkizWRfwwH5wmFyFSOC0ItBpp2DIgMWQTTxGhHEqPkDyKgx8fpZAXC7KOloUkpOnDhRLY7lROl+v8/t27cZDAZYa2k2mxO16TjeymmeJR6FKGRpaYmvfOUrW37+/ve/vwJjgK9+9atvaz/bxWMFyGVTrzSH379/f+VJfO/evZm2Ya0j046w0ZoKxt7hLSXPc6I4otVsMRgOUIWhzGYgLt8jCpBHxRgHgbNEgcBYzzkWomA4DFOccyy0G/SHGVKU27N0Y0miFblxBNLQaDnWR5JMCzrRGCE6WCcY5YKD8467az5Tz7VmlA4QhIRhWGUl/UTQjBzjbPLiv98XNENDf0ryOc5gX9uynvjR7EEQFI2wjUupPxYstA2ZlhXnOZBw7ua0ujzcXjYcWjK8d+kOrQg/9t7VzZXdlpKEybUf6zSVebGRb5abaIZbFwkXxpW5jrMGHTWRjQ5yvI4wswuJKLbsBJjFo+gg2rKvza9WUqEkiOYh4tG6p6JlfiK0MYY8y3Gu9PJQ3ntYOAKb++tcCLL5w+gC+J3OQSgyU0mJtpwTp7UvYZiMoLuEbM19X/nDMFnS2m6i9Hg8ZjAYsL6+zs2bN73UPwiqmrQpZOS7LRL/rav04DED5PX1db7zne9M9SSedTq0lIL5bosb167w5EsvkeeGXGuy3LMmsnLYZzFYEUAK6RtzhW+DwNPfhBTgBNoW8mcK057Cn6GMQHgHtlwbmq0uQdEUCQJFKDVR5EE31xaFpRFLxrn3S15oOQaJAhWz0Lb0RhJtPSgvtFJureRIKWk05+g2BTfupRtMBQthLBhPSaxyIxBsXZDyXHP9bsrSnCPqdCsjoHo451gdSBY7htT4G3s8TGtTQsrmoP+3kobnFlaYj1NP29q0T8dkMzHVkjYbNDifdW+8a6Os4aopIGqzZNk5rAy8L3AtbCEpllIiR2szco5LMyZB3tqHFRKlky3bnvpOnWNbc7hRDyEEYRgQ1m7L0tfCWMPYOnSSEzpDMneIQDukMj6bLgymwkBB2MBlW+vGiIJLvHgYqba/9d9uhryXEELQarVotVoTDbQ8z6sGYp7nfOtb3wI8x7ieTddLK71ej8OHD78jx/39iscKkJvNJu95z3sqW8l67GU6tH9tThyFhIHi1q0Vrl69rrHSLAAAIABJREFUyuHDhzl25CjWQqY1ea4rrmpdPlzeIHlN3xwqn0GnqYGacU6apVUTpN0Oi64+vulWqMq0NkjniEKFdZIkN4TC0ogVg9RnuUM3Jtcduk1Lb+jojzKcg8NLEf3EA/wwhcV2zvp442YbprA057jfm7x7My2J1QjP3PBZU5IkRR2whZOCQHrl4ESfvpbK9saKjh/txoXbxXkqNM1+1prl8KLlIyfu0VReOeYqtsRkQ7QOsqFJN+TQm2dHOT8Pzzve+P00ghxjZNFUK17b6GytqdbCWottziMLq8rNA6unhWl0vaewM2gVoYII0tGOuTKA0xqjYlLp2Hzllr4WARADrt0lbe4j0r4erfOctFDViWJ+ZJaMUUGIEmyYCwnhs+Jmd9dywKPMkB82wjBkcXGRbrfL/fv3ec973lMIeHwD8f79+1y9epUsy4jjmP/4H/8j169f5/Dhw3uy66zHLLLpb3/72/z1v/7X6fV6KKX4u3/37/KpT33qUX3sxwuQ43j7IYl7AeTSMOjOnTtcunSJpaWlai5ePUonsgsXV2i3GgRBiHHWK/U2jb8w1mGsKZRQljwbMR6NaLXbNDudmnOWB2AAJRxKGOIgINcbpYtmKBDCA3MrFIAiigPmGhl31wxOZ3RbbUzBN55rWXqjgg5nY9qxJrMbn2V9KOg2Hf1x/UYVDNKYA62c++sacJUcG7yjXLvhyHJwhQF9ZRFa/N9YyDLf7beu5HUWZaEk4eWThucW11BO+2YpkFtFSljZOTr847kQfh6I1tCIEga2hXXe2EbgkM4SCE1IRihMNU5JYJHCTTTUhFLgPEDLaXSCjS8YC9jWIsrkiKS/LbgaFK4YLFq+1zgQjS4qHcJ2TbnqbDuCQGGbXcS4Vy5Lk4ejQtLmPgwCFbcInKmycIdfRMbj8YR9qTY+a9aNOdpW0tplzBQ8GkDemV8+e9Q5yFLKqoxR308p7vr2t7/Nb/7mb/Iv/+W/5Pjx4/yH//Af9rSvUjb9+c9/nldffZVXX311i0qv1Wrxa7/2a5w6dYpbt27xvve9jx/5kR95ZKWSxwqQd7rQZvWzcM6xsrLCaDTiwYMHvPe9752acZf78ywJRyAd+xe73iZQG7JcF3/MRHmidOuKooiFffugYDMEQfnYKcgLYYhnaHjOaxhISgcG6/zf49DjvjYaafqsr2fsa7XJXBeEJNeWUeZBx9eK8fsTsrDnLD4zYJ1ASaqhqH6x0Sw/yOl0miC20tMe9D0/OctlxbKoOMdFYyrXcOf6AOf8OUzTjLm25iMvGA4Fq+RGkKsmDomSDocjFEDN2aGUceRG0pZjHKAKMx6r6tXaACcC+lqR5Y4GKQebIwK5sQg758iCBtbk6FxX9cnxeFwdu1ISUQdqZzFSITpLqHSAyLc2/pLmPK0poOuMRodNFGZHgyJXkKitzhGNDlJnEw1Gp0LGjX3VubBFdq/CgtYGFVOlUR8fFrcZaUiGQ1auXmU0GlXG8HXucD2jfBQli0dV9tiN8uYnVsd88pOf5Mtf/jL/4B/8A55//vmH8j+fRTZ9+vTp6u9Hjx7l4MGDLC8v/3dA3mvM4mexurrK+fPnaTS8Oc/zzz8/07brxvNCCKIwIAo3Tq3WhnvLK9xbXqHRbBFFjS0z9+qgrYQ/3izxZuDaCVx16BacKUBDMBqlJJlBCsnB/XNYFKk2BdhKWs4yyiWN2INtnoO2ksU5wcr6RhaT5LDQcaysewFAnnvji2arQ7cF/boHf9VIcwwTSacZY5woVG0FzUtrMmO4efse1285Du2HTHZ5+bTi+P6clkhJiAkiV1yEFusm3Sl9fbgk4IlC4bfxu2nhHITKECmHkgG2OYeWEmE0Mh+BVARCgIwg9AA9Go2I4ghbLJZZZqsMuxS0KKV8hh42veJutO59h4E07iLFDreSs2gEqtFBJMOp2e9GHRqcMRipkI0uYtyHMGLcWGCaiakxGqEiX0PPaguFlIRzS6i4RQNYnGIM3+/3uXv3LhcvXqyYMp1Op/L43su0563H9c6KQmDSC/lhShZ7lU1/4xvfIMsynn322T3va7v4MwPIO/lZlObzUkrOnj1Lt9vla1/72szb3gnsHzx4wPnz52m32zx3+iS9Xo/19XUOHD2wKYv2FocO0NqSWVOISxwKU2Vt1kFufKZZdqMX52LW1sZILNY6moHy5Q7pfYQbWJJcMtdyjBIAP+bp4ALcq41tW17TuGwNxBytZouk8LRYG8BC29FPNmrAJVc519BpOsa5qABMKeXHOUnDG98NacQJxw7FnHrG0g1TWjL1FR2xkQNPYyW4ghjhcOgcWrKgbxXvcNaCkJXVJhSvtw4hvXeHr1Ubf6xBGxE1kFYj8nG1R88ZVyipamWpcjaet7fUWhdlGT8bT6oGgYLQZZiggdhlVqIArDGIuF3sfxc7T+df7zpL5DKqDH6mvtRZjAOnIqxLEWFEOH9g28bddsbwJdvh1q1bXLx48aHk0mU8KmOhRz2+6VHJpm/fvs1nPvMZfvVXf/WRNkAfK0De6QRO86cYDoecP3+ePM85ffr0BB1n2tSQ7WKaSX2/3+fcuXNIKXnhhRequtdwOPTE+81ZtDFkufUALQ1Z7lV7ZS2u9L7QRXNNCFiY6yClQhsIwwhrcpQUBMIQhpJIapRTOBvgXECiPfPh3ro/T/1EsNCxrKxZ0rRo2HX2exe4vDCFAMAxTl3VdCtBsYwHfcHSnC+PVOdEpMh0hR//HwLarTmkcMQuIVLG0//EJAQbW2v6lYhbfJ9prujI8USd3f9/4zicc57VQgmwvgZffgQHuCDGGo1BQNgikBKy6ZJpEBuz8WqAUCoPrbUkxnDPRog0oRl40Y6UsmrqTgtnDRqBbHRR+XiiBrz5OGzopeI4hwyKkUw7AbO1jIxgad/hPWe2dbbD1atXefe7340QgizLGAwGVSNtlpIHvPM+FuCf7LYrL5bxKGTTvV6PT3ziE/zCL/wCH/rQh2Y6tlnjsQJkmM1gaDwec/HiRYbDISdPnpyQgtZfvxdWRjlXbzQaceHCBdI03QLysP2g00ApAqVoFaPhnXPcvnOXcZLTbHQYJSmjkd9Hs9n06i7rMFYj8N6+kbJIFWCsxWhDqBRhQxPInEEmiJUizQRzcUpGjLWW9d4QraHZ9JmPcTDfgqznCqKCP5dJLljsuqo5OHHOgVFiWeoktKKMZqgJpEXrECFBWEOTMVI6779RNOxsAe5eR+KQbuOnOM+3yI2kJXx92hU/LzuAE5izgcwIAe3YbSjXnMMFoc+o8Rk3DnJjcCJgJGLisInIx7sahJeiFgfIxhwLxpJrTZ5lCAQyzyrWg6z5WkilkGXTE19bzmWIChvIdLTlIcFGzQqMAe/bLCRKhTidsbVoI3BRk7EZPRJDnHIbURSxuLg44Qm+U8mjBOl3qoZcxqNoIs4im86yjE9+8pP8lb/yV/jpn/7pt73PzfHYAfJ2EYYh/X6fN954g9XVVU6ePMmBAwe2vXhLAJ8VkNM05fXXX2d9fZ1Tp06xtLQ0dds7TZ6uhxCCMFCsJ6vcvrHuF49Tp2i3u2S5qf6UzAFZLEQSh8WihEMK//Nuw9IIYH1saAWWxZbA2FXSHIwLEFKxNsjR1tt+prlgX9sxHhk/z035x/nVgaDTMjjtkMLQiBzzzYxWrAmVrbjA1gkyXUzlMIZIaawI0c4hlKgyWbnxYWvgqrB4HMqtQEjH0LXRuWdxKAyh0AToCuAck09HoXSFl3ERUuGQ1fH5BNyhc02apTQaDXIHBC2UAKkzpK0NCJ3yPdqoMyEAUkFAGEVI1SE2GoxndVhj0MZgs6zI4uWEAZHBZ8KZgdD4MoaN26QiqsC4iqLRSlFecUXTT0hFPLdIbzB8R/jDO5U8+v0+6+vrPHjwgCRJGI1GE5n0rCWPMrTWu2a99Xg7i9EssukvfelL/P7v/z7379/ni1/8IgBf/OIXefnllx96v/V47AB5WoZcUtiWl5c5e/Yszz333K5f3Kxjn7TW3L59m5WVFc6ePcvZs2d3LZ3MAsj17b7wwgu88MIL1XYb8UYWbawjzw299RWkaGKcw9kyq7KVG4UE5hvQH1syEyClIAoFzhmEMBzZ5wqSWQFXTvDkEkCKFJ46Vg0FFfWSRVHEqIi6AiUcwlmU0wSBT/2sK7YtmGgWlYb19XDOez0oLEExOy9SRWbrffHIbIS2EmMFVmtaKieWGpwlCgzOqoqXSxhVQzj9Psuyj6TdatUYFQXNTYWIMEZajcyTLcBowwLAa1F+BGsMFoGMWkiTo2TORlW6VvIoPJdd7QRoImzYxBAgt2TAkyfIA3NAGEbEnTmEVFjbf8cEHZujXvI4dOgQ3W6X0WjE0aNHJxzihkO/aOxW8ihj1hpymqYz+29sF7PIpj/96U/z6U9/+m3tZ6d47AC5HsYYrl27xs2bNzl48CD79+/n6NGjM713N0C21lbbPnDgAPv37686tDvFbkNRrbVcv36dGzdusH//fg4ePMihQ4emvlYIQaAEgZJgMlqxYGFhzhusa0OuLVluyLVhNE7I0pQoCBBYLGFVqxXCFfxggXGghAeJQBT2Qk56oHIFM7gEqGJ4qZ95JwqFosVo68GxQKk6GJfhymLxJjR2+CGruAKMxdREESkEkXKgHC4UCBEx1BGxyhmbBLIE5Swpklhbz5IQkjzPMMbSaDSm1CaLhaYoiVgRYOOuf9rIxn4wqAzIRDhxUGU5pV518MAsPTBbDXnmVYOF0KN+5znnSNKUsVNkuUTrBGs1jTDwnh9FRr15mY8aLaJWp1rc3g4r4lFHybLYziFut5JHt9sliqKZ2RqPwuntByEeS0AuHd6uXbvGsWPH+PCHP0yWZbzxxhszb2O7TNY5x61bt7hy5QqHDx/mgx/8IGmacv78+Zm2u13JwjnHnTt3uHz5MgcPHuSDH/wg4/GYy5cvz7RdKWW1XW9m46luy8vLXL5wgcXFRZ566mnG45Tbd+7SnD/G2tARKkOeK5S0xIHxdVxfxPXnYfNxFv+xzmfRZV5tnWdciNQincYGAikE2rhiHFLx+YVFSg/kxoJSRVm42HZpthSq2qTk6mhqB1FSxGp0sUhZ5jsB0AE6XiZsLSZLydJRNTnZA3OOtaaitW3rPVEIPEzQRCmJkQHkupDFu6p+HMWxr1VXB12IY4qMWURNFA7ydCvtTQhy1SAKoko2D150ZLQmy3KESyfq0jJqEoeTJjyPom77qAQdOwHpdiWP0WhUeVrcuHHDT2TPMrTWJElCt9udECfV43HwsYDHEJCXl5d58803K1AraUw70d6mxbThpcvLy1y8eJF9+/ZVpkVARYuaJUr2Rj3u37/P+fPnmZubm/DgUErNPEpq83Z7vR7nzp0jiiJefvnlarSNs4YsGfD8c02u3XP8ybWAOPCKwEgZQmULdaAhVMVIIFevvVL8XVDrpGGMoB340fSg/PuspREJKt1xwZxwCK/wE5LMikJ6Ds4ZMNCKcmqIuzXq2FksIMY45tsbv5Aq9FMvtCXJDSps0ZprogS4PMXoHGMNOk0rdzqlytquqiaBbOxTkMsYY603d7eW0XAdJSWtVmuygVgdW8nW9txiKwRCxZ69YVKEtf6JIOqASTatCRsUQoi8wRAeoFPjWF1d4+r1G+R5ThzHdLtd8jwnDMO3lSk/qixba115Ys8SJXOj3W5PPBF++9vfZt++faRpWgm26oq9brdLq9Wi1+vNNC3kBz0eO0BuNBq8//3v3yK82K1UsDnqrIxSMNJsNifArf7aWbddv9jr1LiXXnqpsPCcPOZZ6s311yZJwvnz50mSZCrLw3ts5GRZxtFFb5j+RxdiglCiZFSULnzZQAhHUGbOGEKliZUlCiyhMgTCkRpBJCytIKvMg5x1ZBaEUBjnRyZV80LxzC0VeEZFGdpKEBDEoAnRRhVWng6Fd7cLpC2y6bKZ5/nG1kGoHIEqmoUqINOaNElxNcm3dc7zn2WEajb8xW9znPbS8IlRTYXowzutKUTUQhiDAMZpis41cbNDHEUILC7PKYrpG7had6uj/KvFGDAEoCROKqyxRX18OyD0xlhhFNGe34eUikOHy+15y85+v8+tW7dYX19nZWWFIAgmHv9nbaY9KkHHo9qOtZYDBw5M1JGNMQwGAwaDAXfu3OFf/It/wVe+8hWiKOILX/gCL7/8Mh/96Ef3PF9vFi+Lq1ev8slPfhJrfQ/gb/7Nv8lf+2t/7W1/zjIeO0Cen5+fCo57XfWDIKDX6/Enf/InADz//PMTGvp6TMt6dwprLd/97ncZj8ecPn1620etvQByWUq5dOnSVAZJqaIrx8SX7lmdToeT80t8b/kJjFN0mtCIPRB6GbcsVH8BQkxO1giUJpSWWGnIEwJpkGiaEUSBBxnnBGleAmZxLNTlHZAaRaRMVZYVCEK1MRnE/0eSuYBUe0GKEoZI5p6p4RydVnFcUjEcJ+g8Jy4moWwJgacG+rOMDAOUFCirkXnORm/Ioa0jtRKbZWhjcEVZoCwtaG0Q0nsNKynAGKzRmyh5U0AaiVaBF59gGaUZ3XZYmFXVS+uegdJotYmmDBktvYcbjQZJkhAEAUeOHJlwS7tak0zXM8tOp7MFNMtr5O3G9xPYlVITNp6/9Eu/xG/8xm/w2muvceLECX7/93+fV155Zc+APIuXxZEjR/j6179OHMcMBgNefPFFfvzHf3zm3tRu8dgB8qOI8XjM9evXGQ6HvPvd796ySm6OWcE+z3MuXbrEaDTi9OnTO9LuYLIuvF2U9fLr16+ztLTEhz70oS2ZUNnZL70mSkl4mWn0ej1OJW/x3XvPsJpHCCHpNDVSlqo0SSBBm8lj1SYAHA/WHfdXAjTNCkkCaWnFlvmWpRlZ2rFmoZnRim1BSdsA40ZgCraFqGjGgi3+TEj8kFcofm8ViZF0Y4uKBEmSkiZjoij0Txszfi/e4tIzOETY8JNerMFpjYxjglyTFMKZRqtVsFsKmbVJa3Q274OhgoBQKd8E3AzOgFAhGlkZ4xit6XTnqsadpzAarLYoBXGzXbAoNgycpmW79XJD6Za2mT9cZpalQbxzbsLScqOm/vbiUQHyrCWUfr/PyZMn+dSnPvXQ7muzeFnUmRxpVe56dPHYAfJuX95OX3CWZVy6dInV1VUOHz5Mq9XaFYxniToj46mnnqLdbu8KxkBheD+9yVLWtC9cuMCBAwc4ceJE9Z76a0pvCdgqB61nGk8+CacH8OU/suTG0R9JHII4sKjAIoVASYd1agMUnObe/TGpCTBiknKkraQ3lvTGEEUKY2E0SHB5ysvPBXRaEEpDK9Jo6+flbRx3bUMbZeoNZgYFc0OAsl4yvrySEEUNmp1uMa/QFS50Zk9PR368lvMy9aDBaDAiz5KCmqWqQ5KqJrN2YJ3nHBtjyPKckS3N5SWBkoRK+veFMbmjGgQbhiGtdnuiWOHr8JK41ahm0Vlrq+8TmPBOKf/sBoKbM0tgi6Xl2toa4/GY73znOxOZdKOxNTvfKd5pC8/19fXqHnjYmNXL4vr163ziE5/gwoUL/OIv/uIjy47hMQTknaIsAWx+jK1Pon7mmWc4c+YMw+GQS5cuva39ldNLLl++PDHP78aNG2/r0XB9fZ233nqLVqtVudHdunWrGsy6GxBPC2st6yvXeCq6z4Xhe8hNRCMW5CYktxZjfFbrRWiadJzjMSEgCHbedp4Zhv0Rg5FEyJD/73tw9oRkfi5iLYHh0BI1FI1Q0wg0jdDQUDmN0G5RClf47MBoQ6fpSJOURtNnrqOhn4QsC9c2pRRRGHgm24wALaQkSXPSNCOKQprNfdXPRVFkN1ZvbEf4IQX1Ugb4/ZnCCyNLc8ZJhpBjnLNEYUij2URNobNRNLga24wyqoNz/f+DwYB2u43WuvrOdx/IMGlpub6+zu3bt3nqqacqyfTt27dJkmTC16KsS293Lv9rAPIsLItH4WXx5JNP8p3vfIdbt27xEz/xE/z0T//0ttTUvcafKUAuLThLQK4/7j/xxBN8+MMf3hjIOcX7YqfYPJFkZWWF8+fPs7CwMMHIgI2FYa8X7Gg0qrw3ShOkzdssfRbKY5rlieHevXtcvnyZQ4cO8ZE/9zKvZIJ/+zs5o3GIkgadW5w1BFGIEDAeFyY/olC8aef5x1ZU+y2rxNYaVleGOBEWCj2v4nvtnOOZY5onDgc4ITFOMswihpk/T+OxJogUrUDTijSxzOg0LY3AZ4ZGW6QbEwQNmgv7NnGcKRp0hizLSZIE56imP4eBKrLoSR9n8GWSYX+IlMqLRmqKP1N7PBUyKL5r52XNU0JISSAlYRh5paAak+e6yqyTcUKuc5SUhFGEKgB9YW5uR5FDeY2V18/a2hpvvfUWS0tLVYlip0x6J5AuE5Zms0mz2eTAgQPV7+q+FisrK4zH46ouXYJ0u92uGuhv18tiLzS+WYyF4NF4WZRx9OhRXnzxRb761a8+Mhn1YwfIu6nkSlvBMnM9dOgQH/zgB7dcPHthTsAGIA4GA86dO0cYhrz73e+eSv3Zi08G+Mfbixcvsrq6yqlTp9hfs1KEjTLMgwcPaLfbzM3NzSQ3XV9fr5zo3vve91bH027CJ/+c5Yv/T0LcDFFKYIxgNMxQYUCgPL/Yaz1EId4QhIHEGFc08yxaGx6sjLw8W1iiCKzb4Pxevgn374955unmxIXonCOOA7SBYRb6P4OQRitECks+7DEnenzkg4tobbc4oQlBjTJWbpPKuS3LcsYFSAvhfUSUkqRJClJuIxqZDF/aKOr7hdm98Gl44TtR1noDkiwjSXx5ot1uVzXlOI4mjk3nKSvLy1y5fBlr7QTQdbvdLQMS8jyvGDUvvvjiFpbOtEwaqDJof3xy4u87geB2vhYlSN+8eZPhcFjJqG/cuLHtsc8Se7XefLvCkFm8LG7cuMHS0hLNZpPV1VX+4A/+gL/1t/7W29pvPR47QN4pgiBgZWWF733ve1Mz13rsheEAfiH47ne/izFmKt3sYbZtrSVNU77xjW/w1FNPcebMmS0LTtmwm5+f59ixYxWpPk29R0NJwO92uxVIj8djLly4QJ7nPPfcc1PZIwcWJD/+Q45/9zs5c22BCmTx2O8QgWByaFXZoivB2GFyw/pqhhMRUnijoiyzBIHDWk8jcMZw8daAy5cHnHy2wzMnWgSBJBkbgjjc2KqDMFaMxzmvf/sWNs34pb93opLJewqSJtcaXfzZ+v1sCGZgo/ZrrHe6G44SwijCGsNoNCYIgmqAq3/PDiEms2dE4VPhLL1eD1lwlaWcniwoJVlYmCOqgZa1tlKz3bt3b4uaTWvN8vIyzz77LIcOHZqaiGzOpMvtAlWTd3Nd2kvKxYZHyi4Z6nZ16W984xtEUcT9+/e5cuVK5UlRp+LtNl36Yb2QHzZm8bJ44403+NznPldde3/7b/9tXnrppbe133qIPSpzHo2M5/scZS21Hmtra7z22ms0m01efPHFmUjrX/va1/ihH/qhHV9TNgJv3rzJ6dOneeKJJ3YtE/zpn/4px44d2/YRyznH3bt3uXTpEmma8sM//MNTx0ftVCd2zpEkCb1ej36/T6/XI0mSKkt84oknOHbs2K6Z9B9+R/P/fgui0KGERSlJGEeEIaRZDYSKxlYYCJKRYW099zabUyKO/DSTB/f6GGMpPZbDUHLmdJv9SyFBFKMKXvGgn3Lj2jrf/ZM7tJohX/j8Mxw9FE/ddvnZdTHzMNcanWvsFNtKYyyDwYAwijeaVsXnKMs/Wmt0nhW16NDPtyud27b5moWQjMeJn5VYUO+8JefGAlp+VY04pt1ubwvWmz/X/fv3K+56WVYrga6+8O6lAVdm0NevX+f27ducPn2adrs90QCfteRRxh//8R/zgQ98YOLYkySpqHj9fr9qam7mS5f77PV63Lx5k7Nnz+66v7/4F/8iX/nKV7Y8JfwAxUxfyGOZIdcNhgaDAefPn8day6FDh5ibm9uTgmi7MMZw9epVbt++zdNPP10ZqsxyI+yUIa+urnLu3Dk6nQ7ve9/7eO2116byiXerEwshqjrgwYMHuXnzZiUlbzabDAYDXn/99YlMuryp6yD9594VcG8t59sX/Y1oE0MjH5MFCiksSWJqw16Vf/xGbQvGAGmqSQajomQgK3AyxvHG6z3W769Rnp4oljhjGA1yglDykz96YEcwLj97GIbVIrY5i86yjOFwSJbltDvdyfJErUE3jUVR+lGbXKMCRRSFKBVUJQtjHcl4RBBOUu8mM2hJEChazUZVttgtjDFcvnyZBw8e8MILL1QZaSkMKRfemzdvkiQJURRV5YLymt/u2hwOh7z55pssLCzwyiuvVOdju5LHXuvS5Wvr12MZWZbR7/eruvRoNEIpRafTqWifs/RbkiTZM+/4BzEeS0AG/wVduHCB4XDIqVOnWFxc5MaNG3tq1E0L5xw3b97k6tWrHD16tGJO9Pv9mWvO0wB5OBxy7tw5nHMThvb1BuBemRPgZdkXCi+LV155ZcsjYD1z6fV6W8od3W6Xj3+gy/31gBv3BQ7JYGwxeYaQglwbpFATnN9AeTOhbQh7DNaGJIlBFZO4S6ySAsa9QVFnLj6ng9EgBxzHn5Ac7JzjW9+KJkoxJTVsu6iPYlpZWeb69escf/ppjh86hNbG+1HkuqCbTdvAJIuiXLCctcWMxJzRaESaZURhRFQM2/X1WLUlN2rGEe329iWMzbGyssKFCxc4evQoH/jAByY+a10YMg3oer0ey8vLFdDVa9LNZpMrV66wtrbGc889N9Ekhu1LHvWkYBpIw+yeGNPMh7TWFVd6NBrxX/7Lf8E5R7vdnqDi1Rfc+r7/W47HEpAvXLjA3bt3tyjWSt/iWaPe5CiHn9bBrV5GmNVWs3xtCd5ZlnHx4kXW19c5ffr0RMOkPIYs84/M1STlGS688skgCAKBTFQMAAAgAElEQVTe9a53bZs9TMtc6llXCdJnF1NM+jS3B0toA9YZsAHNRjhZugC0gSiEfMr6lPRHJEnBlDAOYQ1BKDFGkI0TskzjLAgpUFIyHqYgBEcOt/g//rcTLMwFExnh7du3GY/HVUZYgvTmjLCkCpY+JOXCFEX1LNpV4Ky1L1fsBCtCShSimGsXsLDQqRZOrfOqROSbhj6LbrcatNvNmcA4SRLOnTsHwMsvv7wnX+DtgK7MRs+fP8/a2lrVqFtbW8MYU4lDtovdQNoYw5UrV2g2m1Xy45zz9L4dRC31CIKAhYUFxuMxnU6HJ598sqqpDwYDb5h1+XJlq/uHf/iHVaJ07NixhwLmWWTTZfR6PZ5//nl+4id+gn/2z/7Znve1UzyWNeT79+8X3Wyx5efLy8s899xzM23nm9/8Ju9617sYj8ecO3eOOI45derUVHC7cuUKYRhy7NixXbd77dq1qpZ4+/ZtnnnmGY4cOTK1Yff6668zGo3Yt28f8/Pzu3asS4AfDAacOnXqkTlglUKUP/jWbb53+2mSPCJLEmQQ+WnVfh4r9XQwDAS6tkbl4zHra9MXxFjlrCwPcK4cneTd2/q9FAH8k59/juPHtn8kzbJsol4+HvvGXKvVqjr/O8nft/vMHpiLLFrriWG01hgGwyFRFHvvlO2AwDkElmQ8pNfrMRgMEEJMlBTqMuaynnvr1i1Onjy5hVXzdiLLMt566y2stZw5c4YwDKuabvnHWlv5FZcL3CwsibW1Nd58802OHDlS9VLqzcM61pSq0RKcp4H09evXUUptK7wo7QJ++7d/m3/6T/8pZ86c4ebNm/z9v//3+amf+qk9nZe/83f+DouLi5VsenV1dYtKr4yf/dmfZXl5mcXFxb0A8kyrxGMJyN5acWsTZ319nevXr/Piiy/OtJ1vfvObVT36zJkzWx7p6nH9+nWccxw/fnzHbTrn+NM//VOWl5d5+umnOX78+JaMpP5IWJ/EUGasxhharVb12D43N4cQomrKPPPMM9t23h8myvJPlmWcPn2aIGzxj//vIQMdYdIMqRTG2ELqXDhVCLy3Q2HPabKM1fujqefDWs3gQZ8olGjjMMahpCMZ+inTn/gfD/C/fvrJPR2ztZarV69y8+ZNFhYWKkVa+dhenre9TrCw1jIeJ9y8dQuHZH5hgQ2D+60RKMVcp0kYTj6M1mXrJRB6up/3SNi3bx+nTp3aYpL1sFGC17Vr13j22Wd35NiW56p+bHme02q1JkoeJUtCa8358+cZj8c899xz2/Zoyntyc226HvW69NWrV2m327vygVdWVvjsZz/L7/zO7wAPJ0o5c+YMv/d7v1dxkD/60Y/y1ltvbXndt771LX7xF3+Rj3/843zzm9985ID8WJYstgOiWS04syzjwoUL9Ho9Tp48uSvIwuRcve2itNksM+lnnnlm4vfTGnZ1JVUp63TOMRz6bOvevXu88cYbJElCu93m8OHDxHH8SIZMlo+fy8vLWzK1z/xPMf/k3/aJWw2cgzgOaqULV1DK/JQRo3MerJRNvMkGpQOyUeJ5wFn5uSFL/ePu0mLIX/2fd3/qqEfZGF1aWuLDH/7wxM1Zmu70+30uX75cTbCog7RnPUz3irh16xbXr1/nxIkTHDx4sMgCbS2L9hm1c452q0GrOZ3atZkulud5dc0dPXqULMt47bXXHjpbrUfZtGu32xPlmu1is3qv/OxlYrC2tsb169dJ0xQhBEmScOjQIc6cObNjY227bHha89BaTxmcRXm4WaX3MArBWWTT1lo+97nP8W/+zb/ZUWDyduKxBOTtYjf1XV1CfeKE57nOSqPZiTkxGAx46623UErxrne9i+FwyOrqavX7vUqdS3WUMYabN2+yuLjIiRMnqkbO3bt3K2ZJp9OZaIDNcrGWZvlXrlzh2LFjvPLKK1tuhCcPR/zMj7X5v748IIwCICZUkCY5RhuMNmht0dpijfPm7mbKo6vOSJOcOtVXYrHae1X87F99ancecBGl9ajWmpdeemlqpjbNdKdeW7169SqDwaACpfLcWWsnlJd1UCv5zXFttJaDaubfbuf67t27XL58maeeemrLeLF6tlr6cZdew3VmzDQ+vbWWy5cvc//+fc6cOfO2hBNCTI5oKgc+WGs5fvx4de7H43FFZaszPHZ6Ctlcl+73+7z++uvs37+fxcXFCV50/R4rRS2zikLermz6l3/5l/nRH/1RnnjiiV339bDxWALydmC2nfrOWjtBCysl1MPh8KEadWWkacqFCxcYDAacPn26ahKkaVrV1sqsYC8Nu1LYobXm7NmzVSZTGpWXNbeyEdLr9bh9+zbnzp3bFaTX19c5d+4c3W6X973vfTuqCd99psHf+18C/vGvrbG6knj1Hr5ZtyWMt9/McreR6TjDem9MIB1Z7ocgSQHjUQZC8P53z/HuF7YvE5VRmjfduXOHZ599dkLuO0sEQcC+ffsmmjjGGPr9Pqurq3z3u98lTdOqUXX79u0tdd96CCFmej4djUa8+eablYf3tMx3u2y1NARaXV3l6tWrZFk2wYxxznHp0iWOHDnC+9///kc2a69UuV69erVqmm+OOpVt81NI+Wc768/S3KvONKr/fvM9Y63lt37rt7h58+aux/52ZdNf//rX+epXv8ov//IvMxgMyLKMTqfDq6++uuu+Z43Hsoa80wSPutij9HG4ePEi+/fv55lnnpm4Ka5cuUIURTO5OfV6Pa5evcpLL72E1porV65w7949Tpw4saWeW7727NmzewJirXXFRT158uREB33WsNZWtcuyweScN3EvSy5nz57d0/SF3Fj+z3+3zusXErQFJSHXm2bO+YF8xJEiL7Lf0foA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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x114420d68>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np  \n",
    "import matplotlib.pyplot as plt  \n",
    "import mpl_toolkits.mplot3d  \n",
    "  \n",
    "x,y=np.mgrid[-2:2:20j,-2:2:20j]  \n",
    "z=x*np.exp(-x**2-y**2)  \n",
    "  \n",
    "ax=plt.subplot(111,projection='3d')  \n",
    "ax.plot_surface(x,y,z,rstride=2,cstride=1,cmap=plt.cm.coolwarm,alpha=0.8)  \n",
    "ax.set_xlabel('x')  \n",
    "ax.set_ylabel('y')  \n",
    "ax.set_zlabel('z')    \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 泰勒級數\n",
    "#### 泰勒級數（Taylor Series）\n",
    "在前幾章的預熱之後，讀者可能有這樣的疑問，是否任何函數都可以寫成友善的多項式形式呢？ 到目前為止，我們介紹的$e^x$, $sin(x)$, $cos(x)$ 都可以用多項式進行表達。其實，這些多項式實際上就是這些函數在 $x=0$ 處展開的泰勒級數。\n",
    "下面我們給出函數 $f(x)$ 在$x=0$ 處展開的泰勒級數的定義：\n",
    "$\\begin{align*}f(x) = f(0) + \\frac{f'(0)}{1!}x + \\frac{f''(0)}{2!}x^2 + \\frac{f'''(0)}{3!}x^3 + \\dots = \\sum^{\\infty}{k = 0} \\frac{f^{(k)}(0)}{k!}x^k \\end{align*}$\n",
    "其中：$f^{(k)}(0)$ 表示函數 $f$ 在 $k$ 次導函數在 $x=0$ 的取值。\n",
    "<br>\n",
    "我們知道 $e^x$ 無論計算多少次導數結果出來都是 $e^x$\n",
    "即，$exp(x) = exp'(x)=exp''(x)=exp'''(x)=exp'''(x) = \\dots$\n",
    "因而，根據上面的定義展開：<br>\n",
    "$\\begin{align*}exp(x) &= exp(0) + \\frac{exp'(0)}{1!}+\\frac{exp''(0)}{2!}x^2 +\\frac{exp'''(0)}{3!}x^3 + \\dots \\\\ &=1 + \\frac{x}{1!} + \\frac{x^2}{2!} + \\frac{x^3}{3!} + \\dots \\\\&=\\sum_{k=0}^{\\infty}\\frac{x^k}{k!}\\end{align*}$\n",
    "#### 多項式近似（Polynomial Approximation）\n",
    "泰勒級數，可以把非常複雜的函數變成無限項的和的形式。通常，我們可以只計算泰勒級數的前幾項和，就可以獲得原函數的局部近似了。在做這樣的多項式近似時，我們所計算的項越多，則近似的結果越精確。\n",
    "下面，開始使用 `python` 做演示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Taylor expansion at n=1 x\n",
      "Taylor expansion at n=3 -x**3/6 + x\n",
      "Taylor expansion at n=5 x**5/120 - x**3/6 + x\n",
      "Taylor expansion at n=7 -x**7/5040 + x**5/120 - x**3/6 + x\n",
      "Taylor expansion at n=9 x**9/362880 - x**7/5040 + x**5/120 - x**3/6 + x\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAEaCAYAAAD65pvjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJzs3Xl8FPX9+PHXzJ7ZzWaTzeZOyAEJRzjlBjnk8MS7aj3Qtlrv42vrgVUr2nrVai1q1VoPtLb+1HogoAKiCETOAIEEk5AQIBe5781e8/n9kZIaSCAJSXaTzPPx4PEgm9mZdz47M+/9HPP5SEIIgUqlUqlUPyH7OgCVSqVS+R81OahUKpXqBGpyUKlUKtUJ1OSgUqlUqhOoyUGlUqlUJ1CTg0qlUqlOoCYHVZcsWbKE0aNH+zqMLps2bRp33nmnr8PoF37+85+zaNEinx3/q6++QpIkKioqfBaDCrS+DkB1+iRJOunv4+PjKSgo6Jtg/NTq1avR6XS+DqNfeP311+mLx588Hg86nY5///vf/PznP299fd68eZSUlBAaGtrrMag6piaHAaCkpKT1/2lpaVx++eWkp6cTFRUFgEaj8VVo7XK5XOj1+j49ls1m65Pj+UpPlqnVau2R/XSXXq8nMjLSpzGo1GalASEyMrL137GbYFhYWOtrYWFhACxfvpzJkycTFBREWFgYF110EXl5ea37mTZtGnfffXebfXu9XuLi4njuuec6PP4//vEPhg8fjl6vJy4ujqVLl6IoSpv93nbbbSxZsoTIyEhSUlLa3Y/T6eTuu+8mJiYGg8FAdHQ0N9xwQ5tt3nvvPcaOHYvRaCQxMZEHHngAh8NxymMd36wkhOCFF14gJSUFo9HI8OHD+dOf/oTX623d5uOPP2bcuHGYTCZCQkKYPn06+/bt67Actm7dytlnn01YWBgWi4WpU6fyzTfftNkmMjKSxx9/nF/84hdYLBbCwsJ47LHH2nxT78o2N998MzabjYULFwJQWFjIFVdcgdVqxWQyMX/+fPbs2dP6vieeeILQ0FAKCwtbX/vd735HVFQUZWVlwInNSsd+fv7554mJicFisXD77bfj9XpZtmwZcXFx2Gw27rjjDjweT+v7Vq9ezezZs7HZbAQHBzNv3jzS09Nbfx8bGwvA1VdfjSRJGI1GoP1mpU2bNnHmmWdiNBqx2Wxcf/31VFZWtv7+WHPnRx99REpKCoGBgcyfP5+DBw92+HmpTkGoBpRvv/1WAOLIkSMn/O7vf/+7WLVqlThw4IDYsWOHOPfcc8WoUaOE2+0WQgjx1ltviZCQEOFwOFrfs3LlSqHX60VZWZkQQogHH3xQpKamtv7+448/FhqNRvz5z38WOTk54v333xdBQUHij3/8Y+s2U6dOFYGBgeKuu+4SWVlZYu/eve3G/uSTT4qEhASxYcMGcejQIbF161axbNmy1t+/+uqrIjQ0VLz//vsiLy9PrF+/XowcOVLcdNNNpzzW1KlTxR133NG63YMPPigSExPF559/LvLz88WKFStEVFRUa9yHDh0SGo1GvPjiiyI/P19kZmaKd999V2RlZXVY9mvXrhXvvvuuyMzMFD/++KO4//77hcFgEPn5+a3bRERECIvFIp544gmRnZ0t3nrrLWE0GsVrr73WrW2efPJJkZOTI/bv3y+8Xq8YN26cmDhxokhLSxN79uwRl1xyibDb7aK6uloIIYTX6xVz5swRs2fPFh6PR6xdu1ZoNBqxdu3a1n1fddVV4oILLmjzc1BQkLjpppvE/v37xX/+8x+h1WrFueeeK2688UaRlZUlPvvsM6HT6cRbb73V+r4PP/xQfPzxxyI7O1vs3btXLF68WISFhYmamhohhBDFxcUCEK+99pooKSkRpaWlQgghvvzySwGI8vJyIYQQhw8fFiaTSdxwww1i37594rvvvhMjRowQCxYsaPN5BgYGivPPP1+kp6eL9PR0MWbMmDbbqLpGTQ4DzMmSw/GOXZw7duwQQgjR2NgorFareO+991q3ueSSS8SVV17Z+vPxyWHSpEli8eLFbfb7zDPPiMDAQOH1eoUQLTfm1NRUoSjKSeO5+eabxbnnntvudoqiiMjISPH222+3ef3rr78WkiSJxsbGkx7rp8mhpqZG6PV68e2337bZ5vXXXxcRERFCCCHS0tKEJEmiuLj4pDGfSkpKivjzn//c+nNERMQJN6x7771XDBs2rMvbnH/++W22WblypZAkSeTm5ra+1tjYKEJDQ8Wzzz7b+lphYaGw2+3irrvuEpGRkWLJkiVt9tNecoiJiWn9EiGEEPPmzRNRUVHC5XK1vnb22WeLa6+9tsOycLvdwmQyiY8//rj1Z0D8+9//brPd8cnhvvvuE4mJiW2Ov2XLFgGIrVu3CiFazku9Xi+qqqpat3nnnXeEVqsVHo+nw5hUHVOblQaRnTt3cvHFF5OQkIDFYiE5ORmAQ4cOAWAymVi8eDFvvPEGAKWlpaxcuZJf//rXHe4zKyuL2bNnt3ltzpw5NDQ0tO4XYPLkyafsOL/pppvYtm0bKSkp3H777Xz66ae43W6gpbmktLSU22+/ncDAwNZ/l156KUKINs1jpzpWRkYGLpeLCy64oM2+7rnnHo4ePUp9fT2TJ09mzpw5DB8+nMsvv5yXXnqJoqKik8ZfWlrKLbfcwvDhw7FarQQGBnLgwIE25QAwffr0Nj/PnDmT/Px8nE5nl7aZMmVKm20yMzOJjo5m2LBhra+ZTCYmTZpEZmZm62sxMTH8/e9/56WXXiIuLo4//OEPJ/27AFJTU9Fq/9dFGRkZyciRI9t08kdGRrY2TQHk5uZyzTXXMHToUIKCgggODsbhcJxQHqeSmZnJjBkz2hx/ypQpGI3GNn9XfHw8ISEhrT9HR0fj8XjaND+pOk/tkB4kamtrWbhwIQsXLmT58uVERETgcrkYN24cLperdbtbb72VMWPGkJ2dzaeffsqQIUOYP3/+aR/fbDafcpvJkydTUFDAmjVr+Pbbb7njjjtYunQpaWlprX0Yr732GjNmzDjhvXFxcZ0+1rF9rVixgvj4+HZjlWWZ9evXs3XrVtatW8cHH3zAgw8+yOeff97avn+8a6+9lqqqKp5//nkSEhIwGo1ceumlbcq3I6KlFt+lbTpTph3ZsGEDGo2G0tJS6uvr29xU23P8SC9Jktp97ad9Teeddx7x8fG89tprxMTEoNfrmTx5cqfKozuO75A/9gXhpzGpOk+tOQwS+/bto7q6mmeeeYY5c+YwYsSIdseRp6amMmPGDN544w3efPNNbrrpppN+Cx81ahTff/99m9c2bNiAxWJp98Z7KhaLhcsvv5yXX36ZtLQ0MjIySEtLIy4ujvDwcHJychg2bNgJ/wwGQ6ePMXbsWHQ6HQcPHmx3X7LccllIksS0adN45JFH2Lx5M1OmTOGdd95pd59CCDZu3Mjdd9/NokWLGD16NGFhYe1+S96yZUubn9PS0khKSmrtkO3sNsdLTU2luLiYAwcOtL7W1NTEjh072jybsmrVKl555RW+/vprbDYbN954Y8eF1U1FRUXk5eXxyCOPsHDhQkaNGoUsy9TU1LRuo9Fo0Gg0bQYBdPR3paWltens3rZtG83Nzf3ymZv+Qq05DBKJiYnodDqWLVvGXXfdxYEDB3jooYfa3faWW27hpptuQlEUfvnLX550vw899BBXXnkl48aN46KLLmL79u089dRTPPjgg6032c56+umnSUhIYNy4cRiNRpYvX45Op2u9Yf/xj3/krrvuwmKxsGjRIjQaDVlZWXzzzTe88sornT5OSEgI999/P/fddx8ej4d58+bhcrnIyMggMzOTJ598ku+++460tDQWLFhAZGQkP/74I1lZWR3WGiRJIiUlhffee48pU6bgdDp5+OGH291269atPPnkk1x55ZWkpaXx6quv8vzzz3d5m+Odd955jB07lquvvpply5YRGBjI73//eyRJ4uabbwZahj3/4he/4NFHH2X+/Pl88MEHTJw4kVdffZXbbrut02V4KuHh4QQHB/P6668TGxtLWVkZ999/f5vkJkkS8fHxrF+/nnnz5qHX69t9tuGee+7hb3/7GzfddBP3338/FRUV3HbbbSxYsIDJkyf3WMyq4/iyw0PV807WIf2vf/1LJCUlCYPBICZOnCg2bNjQboegw+EQwcHB4rLLLjthH8d3SAshxBtvvCFSUlKETqcTsbGx4rHHHmvtjBbixJFCHVm2bJkYP368CAwMFIGBgWLKlCli1apVbbb56KOPxJQpU4TRaBQWi0VMmDBBPPXUU6c8Vnuvv/rqq2LMmDFCr9eLkJAQMW3aNPHGG28IIYTYvXu3OOecc0R4eLjQ6/UiPj5eLFmypE2n6PHS09NbY0tMTBRvvPGGmDlzprjllltat4mIiBBLly4V1113nTCbzSI0NFQ88sgjbTrQO7vNc889d0IMR44cEZdffrkICgoSAQEB4qyzzhK7du0SQrSMVJo/f76YPXt2m8/nzTffFAEBAa0ju9rrkP7pz0IIce2114pzzjmnzWs33HCDmD9/fuvPa9euFampqcJgMIiRI0eKzz//XMTExIinn366dZsVK1a0njsGg0EIcWKHtBBCbNy4UcyYMUMYDAYREhIiFi9eLCoqKlp/3955uXbtWgGIkpKSE8pJdWqSEOpKcKq2SktLGTJkCF988QXnnHOOr8MZUCIjI7nvvvu47777Tmsblaq3qc1KqlZut5vKykoeeughkpOTOfvss30dkkql8hG1Q1rV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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1148445f8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import sympy as sy\n",
    "import numpy as np\n",
    "from sympy.functions import sin,cos\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.style.use(\"ggplot\")\n",
    "\n",
    "# Define the variable and the function to approximate\n",
    "x = sy.Symbol('x')\n",
    "f = sin(x)\n",
    "\n",
    "# Factorial function\n",
    "def factorial(n):\n",
    "    if n <= 0:\n",
    "        return 1\n",
    "    else:\n",
    "        return n*factorial(n-1)\n",
    "\n",
    "# Taylor approximation at x0 of the function 'function'\n",
    "def taylor(function,x0,n):\n",
    "    i = 0\n",
    "    p = 0\n",
    "    while i <= n:\n",
    "        p = p + (function.diff(x,i).subs(x,x0))/(factorial(i))*(x-x0)**i\n",
    "        i += 1\n",
    "    return p\n",
    "# Plot results\n",
    "def plot():\n",
    "    x_lims = [-5,5]\n",
    "    x1 = np.linspace(x_lims[0],x_lims[1],800)\n",
    "    y1 = []\n",
    "    # Approximate up until 10 starting from 1 and using steps of 2\n",
    "    for j in range(1,10,2):\n",
    "        func = taylor(f,0,j)\n",
    "        print('Taylor expansion at n='+str(j),func)\n",
    "        for k in x1:\n",
    "            y1.append(func.subs(x,k))\n",
    "        plt.plot(x1,y1,label='order '+str(j))\n",
    "        y1 = []\n",
    "    # Plot the function to approximate (sine, in this case)\n",
    "    plt.plot(x1,np.sin(x1),label='sin of x')\n",
    "    plt.xlim(x_lims)\n",
    "    plt.ylim([-5,5])\n",
    "    plt.xlabel('x')\n",
    "    plt.ylabel('y')\n",
    "    plt.legend()\n",
    "    plt.grid(True)\n",
    "    plt.title('Taylor series approximation')\n",
    "    plt.show()\n",
    "\n",
    "plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 展開點（Expansion Point）\n",
    "上述的式子，都是在 $x=0$ 進行的，我們會發現多項式近似只在 $x=0$ 處較為準確。但，這不代表，我們可以在別的點進行多項式近似，如$x=a$ ：\n",
    "$f(x) = f(a) + \\frac{f'(a)}{1!}(x-a) + \\frac{f''(a)}{2!}(x-a)^2 + \\dots $"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 極限\n",
    "### 極限（Limits）\n",
    "函數的極限，描述的是輸入值在接近一個特定值時函數的表現。\n",
    "定義： 我們如果要稱函數 $f(x)$ 在 $x = a$ 處的極限為 $L$，即：$lim_{x\\rightarrow a} f(x) = L$，則需要：\n",
    "對任意一個 $\\epsilon > 0$，我們要能找到一個 $\\delta > 0$ 使的當 $x$ 的取值滿足：$0<|x-a|<\\delta$時，$|f(x)-L|<\\epsilon$ "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-6\n"
     ]
    }
   ],
   "source": [
    "import sympy\n",
    "x = sympy.Symbol('x',real = True)\n",
    "f = lambda x: x**x-2*x-6\n",
    "y = f(x)\n",
    "print(y.limit(x,2))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 函數的連續性\n",
    "極限可以用來判斷一個函數是否為連續函數。\n",
    "當極限$\\begin{align*}\\lim_{x\\rightarrow a} f(x)= f(a)\\end{align*}$時，稱函數$f(x)$在點$ x = a$ 處為連續的。當一個函數在其定義域中任意一點均為連續，則稱該函數是連續函數。\n",
    "\n",
    "#### 泰勒級數用於極限計算\n",
    "我們在中學的時候，學習過關於部分極限的計算，這裡不再贅述。泰勒級數也可以用於計算一些形式比較複雜的函數的極限。這裡，僅舉一個例子：<br>\n",
    "$\\begin{align*} \\lim_{x\\rightarrow 0}\\frac{sin(X)}{x} &= lim_{x\\rightarrow 0} \\frac{\\frac{x}{1!}-\\frac{x^3}{3!}\\dots }{x} \\\\ &= \\lim_{x\\rightarrow 0} \\frac{x(1-\\frac{x^2}{3!}+\\frac{x^4}{5!}-\\frac{x^6}{7!}+\\dots}{x} \\\\ &= \\lim_{x\\rightarrow 0} 1 -\\frac{x^2}{3!} + \\frac{x^4}{5!}-\\frac{x^6}{7!}+\\dots \\\\& = 1 \\end{align*}$ \n",
    "\n",
    "#### 洛必達法則（l'Hopital's rule)\n",
    "在高中，老師就教過的一個神奇的法則：如果我們在求極限的時候，所求極限是無窮的，那我們可以試一下使用洛必達法則，哪些形式呢：$\\frac{0}{0}, \\frac{\\infty}{\\infty}, \\frac{\\infty}{0}$等等。**這裡，我們要注意一個前提條件：上下兩個函數都是連續函數才可以使用洛必達法則**這裡我們用 $\\frac{0}{0}$ 作為一個例子：\n",
    "<br>\n",
    "$\\begin{align*}\\lim_{x \\rightarrow a}\\frac{f'(x)}{g'(x)} \\\\\n",
    "= \\lim_{x \\rightarrow a}\\frac{f'(x)}{g'(x)} \\end{align*}$\n",
    "<br>\n",
    "若此時，分子分母還都是$0$的話，再次重複：$\\begin{align*}\\lim_{x \\rightarrow a}\\frac{f''(x)}{g''(x)}\\end{align*}$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 大$O$記法（Big-O Notation)\n",
    "*這個我在網上能找到的資料很少，大多是算法的時間複雜度相關的資料*<br>\n",
    "算法複雜度的定義：<br>\n",
    "> We denote an algorithm has a complexity of O(g(n))if there exists a constants \n",
    "> $c \\in R^+$, suchthat $t(n)\\leq c\\cdot g(n), \\forall n\\geq 0$.<br>\n",
    "> > 這裡的$n$是算法的輸入大小（input size），可以看作變量的個數等等。<br>\n",
    "> > 方程$t$在這裡指算法的“時間”，也可以看作執行基本算法需要的步驟等等。<br>\n",
    "> > 方程$g$在這裡值得是任意函數。<br>\n",
    "\n",
    "*我們也可以將這個概念用在函數上：*<br>\n",
    "我們已經見過了很多函數，在比較這兩個函數時，我們可能會知道，隨著輸入值$x$的增加或者減少，兩個函數的輸出值，兩個函數的輸出值增長或者減少的速度究竟是誰快誰慢，哪一個函數最終會遠遠甩開另一個。\n",
    "通過繪製函數圖像，我們可以得到一些之直觀的感受："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJzt3Xl8VPW9//HXZ5KQhEAggQRBQHaQaGWJiqVugCBgiSBGKEuwKuoFS6+/arn39tHa3drFBpcgKjrDvgmuSFygF+wtNCzKvsoaMWFPQrbJfH9/nBMIGMg2S2byeT4e85gz3znL59A+3jl+53u+R4wxKKWUCl2OQBeglFLKtzTolVIqxGnQK6VUiNOgV0qpEKdBr5RSIU6DXimlQpwGvVJKhTgNeqWUCnEa9EopFeLCA10AQMuWLU2HDh0CXYZSSgWVjRs3njDGJFS1Xr0I+g4dOpCVlRXoMpRSKqiIyKHqrKddN0opFeI06JVSKsRp0CulVIjToFdKqRCnQa+UUiFOg14ppUKcBr1SSoU4DXqllAoAYww/+9nP2Lx5s8+PpUGvlFIBsG7dOv7617+ybds2nx9Lg14ppQLA6XTSpEkTRo0a5fNjVRn0ItJdRLZUeJ0TkZ+KSLyIfCIie+33OHt9EZEZIrJPRL4SkT4+PwullAoihYWFLF68mNGjRxMTE+Pz41UZ9MaY3caYXsaYXkBf4DywHJgOfGaM6Qp8Zn8GGAp0tV+TgQxfFK6UUsFqxYoV5OXlMXHiRL8cr6ZdNwOB/caYQ0AK4LTbncD99nIK4DKWfwHNRaS1V6pVSqkQ4HQ6ad++PXfeeadfjlfToB8DLLCXWxljvrGXjwOt7OVrgSMVtjlqtymlVIOXnZ3NJ598woQJE3A4/PMzabWPIiKNgBHAksu/M8YYwNTkwCIyWUSyRCQrNze3JpsqpVTQmjdvHh6Px2/dNlCzK/qhwCZjzLf252/Lu2Ts9xy7/RjQrsJ2be22SxhjZhljko0xyQkJVc6br5RSQc8Yg9Pp5LbbbqNbt25+O25Ngn4sF7ttAN4D0uzlNODdCu0T7dE3/YCzFbp4lFKqwdq8eTPbt2/369U8VPMJUyISA9wDPF6h+XlgsYg8AhwCUu32j4BhwD6sEToPe61apZQKYk6nk0aNGvHQQw/59bjVCnpjTAHQ4rK2k1ijcC5f1wBTvFKdUkqFiNLSUubPn8+IESOIi4vz67H1zlillPKDlStXcuLECdLS0qpe2cs06JVSyg9cLheJiYkMGTLE78fWoFdKKR87deoU77//Pj/60Y+IiIjw+/E16JVSyscWLlxISUlJQLptQINeKaV8zuVyceONN3LTTTcF5Pga9Eop5UO7d+9m/fr1pKWlISIBqUGDXimlfMjlcuFwOBg3blzAatCgV0opH/F4PMyZM4chQ4ZwzTXXBKwODXqllPKR1atXc+TIkYD9CFtOg14ppXzE5XLRrFkzRowYEdA6NOiVUsoH8vPzWbZsGampqURHRwe0Fg16pZTygXfeeYeCgoKAd9uABr1SSvmE0+mkc+fOfP/73w90KRr0SinlbYcPH2b16tVMnDgxYGPnK9KgV0opL5s7dy7GGCZMmBDoUgANeqWU8qryxwXecccddOzYMdDlABr0SinlVRs2bGDPnj314kfYchr0SinlRU6nk+joaEaPHh3oUi7QoFdKKS8pLi5m4cKFjBw5ktjY2ECXc0G1gl5EmovIUhHZJSI7ReQ2EYkXkU9EZK/9HmevKyIyQ0T2ichXItLHt6eglFL1wwcffMDp06eZOHFioEu5RHWv6NOBj40xPYCbgJ3AdOAzY0xX4DP7M8BQoKv9mgxkeLVipZSqp5xOJ23atGHQoEGBLuUSVQa9iDQD7gDeBDDGlBhjzgApgNNezQncby+nAC5j+RfQXERae71ypZSqR3Jycli5ciXjx48nLCws0OVcojpX9B2BXOAtEdksIm+ISAzQyhjzjb3OcaCVvXwtcKTC9kfttkuIyGQRyRKRrNzc3NqfgVJK1QMLFizA7XbXu24bqF7QhwN9gAxjTG+ggIvdNAAYYwxganJgY8wsY0yyMSY5ISGhJpsqpVS943Q66du3L0lJSYEu5TuqE/RHgaPGmPX256VYwf9teZeM/Z5jf38MaFdh+7Z2m1JKhaStW7eyefPmenk1D9UIemPMceCIiHS3mwYCO4D3gPI7AtKAd+3l94CJ9uibfsDZCl08SikVclwuF+Hh4YwdOzbQpVQqvJrrPQXME5FGwAHgYaw/EotF5BHgEJBqr/sRMAzYB5y311VKqZDkdruZO3cuw4cPp752Q1cr6I0xW4DkSr4aWMm6BphSx7qUUioofPrppxw/frzedtuA3hmrlFJ14nQ6iY+PZ/jw4YEu5Yo06JVSqpbOnj3LihUrGDNmDJGRkYEu54o06JVSqpaWLFlCUVFRvZqpsjIa9EopVUtOp5MePXpw8803B7qUq9KgV0qpWti/fz/r1q2rN48LvBoNeqWUqoU5c+YgIowfPz7QpVRJg14ppWrIGIPL5WLAgAG0a9eu6g0CTINeKaVqaN26dXz99df1/kfYchr0SilVQ06nk5iYGEaNGhXoUqpFg14ppWqgsLCQxYsXM3r0aGJiYgJdTrVo0CulVA2sWLGCvLy8oOm2AQ16pZSqEZfLRfv27bnzzjsDXUq1adArpVQ1ZWdnk5mZyYQJE3A4gic+g6dSpZQKsHnz5uHxeOr1TJWV0aBXSqlqMMbgdDrp168f3bp1C3Q5NaJBr5RS1bB582a2b98eVD/CltOgV0qpanC5XDRq1IjU1NSqV65nNOiVUqoKpaWlzJ8/nxEjRhAfHx/ocmqsWkEvIgdFZKuIbBGRLLstXkQ+EZG99nuc3S4iMkNE9onIVyLSx5cnoJRSvrZy5Upyc3ODstsGanZFf7cxppcxpvzZsdOBz4wxXYHP7M8AQ4Gu9msykOGtYpVSKhBcLhcJCQkMGTIk0KXUSl26blIAp73sBO6v0O4yln8BzUWkdR2Oo5RSAXPq1Cnef/99xo0bR0RERKDLqZXqBr0BMkVko4hMtttaGWO+sZePA63s5WuBIxW2PWq3KaVU0Fm0aBElJSVBN3a+ovBqrvcDY8wxEUkEPhGRXRW/NMYYETE1ObD9B2MyQPv27WuyqVJK+Y3T6eTGG2+kV69egS6l1qp1RW+MOWa/5wDLgVuAb8u7ZOz3HHv1Y0DFmfjb2m2X73OWMSbZGJOckJBQ+zNQSikf2b17N+vXryctLa3ePy7waqoMehGJEZGm5cvAYGAb8B5Q/hN0GvCuvfweMNEefdMPOFuhi0cppYKGy+XC4XDwox/9KNCl1El1um5aAcvtv2bhwHxjzMci8m9gsYg8AhwCyu8i+AgYBuwDzgMPe71qpZTyMY/Hw5w5cxgyZAitWwf3eJIqg94YcwC4qZL2k8DAStoNMMUr1SmlVICsWbOGI0eO8MILLwS6lDrTO2OVUqoSTqeTZs2akZKSEuhS6kyDXimlLpOfn8+yZctITU0lOjo60OXUmQa9Ukpd5p133qGgoCCox85XpEGvlFKXcTqddOrUif79+we6FK/QoFdKqQoOHz7M6tWrmThxYlCPna9Ig14ppSqYO3cuxpiQ6bYBDXqllLqg/HGBd9xxBx07dgx0OV6jQa+UUrYNGzawZ8+ekLqaBw16pZS6wOl0Eh0dzYMPPhjoUrxKg14ppYDi4mIWLlzIyJEjiY2NDXQ5XqVBr5RSwAcffMDp06dDrtsGNOiVUgqwum1at27NoEGDAl2K12nQK6UavJycHFauXMn48eMJCwsLdDlep0GvlGrwFixYgNvtJi0treqVg5AGvVKqwXO5XPTt25ekpKRAl+ITGvRKqQZt27ZtbNq0KSR/hC2nQa+UatCcTifh4eGMHTs20KX4jAa9UqrBcrvdzJ07l2HDhpGQkBDocnym2kEvImEisllEPrA/dxSR9SKyT0QWiUgjuz3S/rzP/r6Db0pXSqm6+fTTTzl+/HjI/ghbriZX9NOAnRU+/wl40RjTBTgNPGK3PwKctttftNdTSql6x+l0Eh8fz/DhwwNdik9VK+hFpC0wHHjD/izAAGCpvYoTuN9eTrE/Y38/UEJlUmelVMg4e/YsK1asYMyYMURGRvr9+MXFMHEibN/u+2NV94r+78CzgMf+3AI4Y4xx25+PAtfay9cCRwDs78/a6yulVL2xZMkSioqKAtJtYww8+ijMmQNffeX741UZ9CJyH5BjjNnozQOLyGQRyRKRrNzcXG/uWimlquRyuejevTs333yz34/9q1/B3Lnwu9+BPwb7VOeKvj8wQkQOAguxumzSgeYiEm6v0xY4Zi8fA9oB2N83A05evlNjzCxjTLIxJjmUf+1WStU/Bw4cYO3ataSlpfn9cYGzZ8NvfwuPPAL//d/+OWaVQW+M+S9jTFtjTAdgDPC5MWYcsBoYba+WBrxrL79nf8b+/nNjjPFq1UopVQculwsRYfz48X497iefwOOPwz33QEYG+OtvTF3G0f8ceFpE9mH1wb9pt78JtLDbnwam161EpZTyHmMMLpeLAQMG0K5dO78dd+tWeOABuP56WLoUIiL8dmjCq17lImPMGmCNvXwAuKWSdYqA0Ho8i1IqZKxbt46vv/6aX//613475rFjMGwYNG0KH30E/n6uSY2CXimlgp3L5SImJoaRI0f65Xh5eXDffXDmDKxdC23b+uWwl9CgV0o1GIWFhSxevJjRo0fTpEkTnx/P7YbUVKvb5oMPoFcvnx+yUhr0SqkGY8WKFZw7d84vY+eNgSlT4OOP4bXX4N57fX7IK9JJzZRSDYbL5aJ9+/bceeedPj/WCy/ArFkwfTpMnuzzw12VBr1SqkHIzs4mMzOTCRMm4HD4NvoWLrQCfswY+P3vfXqoatGgV0o1CPPnz8fj8TBhwgSfHmfdOkhLgx/8AN56C3z8N6Va6kEJSinlW8YYnE4n/fr1o3v37j47zu7dkJICHTrAihUQFeWzQ9WIBr1SKuRt3ryZbdu2+fRH2Nxca6x8WBisXAkt6tFUjjrqRikV8lwuF40aNSI1NdUn+y8shBEjIDsbVq+GTp18cpha06BXSoW00tJS5s+fz4gRI4iPj/f6/j0eGD8e1q+3pjbo18/rh6gzDXqlVEj7+OOPyc3NZeLEiT7Z/zPPwDvvwN/+BqNG+eQQdaZ99EqpkOZ0OklISOBeH9yx9PLLVsA/9RT89Kde373XaNArpULWqVOneP/99xk3bhwRXp4u8r33YNo0q2/+xRf9N+VwbWjQK6VC1qJFiygpKfF6t01WlvVkqD59YP58a6RNfaZBr5QKWU6nkxtvvJFeXpxN7OBBazbKxERrorKYGK/t2mc06JVSIWn37t2sX7+eiRMneu1xgadPW2Pli4uteeVbtfLKbn1OR90opUKSy+XC4XAwbtw4r+yvpMQaVbNvH2RmWk+KChYa9EqpkOPxeJgzZw5DhgyhdevWdd6fMfDoo7BmDcyZA3fdVedd+pV23SilQs6aNWs4cuSI136E/dWvrID/7W+tm6OCTZVBLyJRIrJBRL4Uke0i8mu7vaOIrBeRfSKySEQa2e2R9ud99vcdfHsKSil1KafTSWxsLCkpKXXe11tvWQH/4x/D//yPF4oLgOpc0RcDA4wxNwG9gHtFpB/wJ+BFY0wX4DTwiL3+I8Bpu/1Fez2llPKL/Px8li1bRmpqKtHR0XXa16efWg8NGTQIZs6s32Plr6bKoDeWfPtjhP0ywABgqd3uBO63l1Psz9jfDxRv/eStlFJVeOeddygoKKjzTJVbt8IDD1g/ui5dCl6+38qvqtVHLyJhIrIFyAE+AfYDZ4wxbnuVo8C19vK1wBEA+/uzQD2asFMpFcqcTiedOnWif//+td5HdjYMHw5NmsCHH0KzZl4sMACqFfTGmDJjTC+gLXAL0KOuBxaRySKSJSJZubm5dd2dUkpx+PBhVq9eXaex83l5VsifPm2FfLt2Xi4yAGo06sYYcwZYDdwGNBeR8uGZbYFj9vIxoB2A/X0z4GQl+5pljEk2xiQnJCTUsnyllLpo7ty5GGNq/bhAt9t6zuvWrbB4MXjxhtqAqs6omwQRaW4vRwP3ADuxAn+0vVoa8K69/J79Gfv7z40xxptFK6XU5YwxuFwubr/9djrV4skfxsDUqdYdr6++CkOH+qDIAKnODVOtAaeIhGH9YVhsjPlARHYAC0Xkd8Bm4E17/TeBOSKyDzgFjPFB3UopdYkNGzawe/dunnnmmVpt/+c/w2uvwc9/bo20CSVVBr0x5iugdyXtB7D66y9vLwIe9Ep1SilVTU6nk6ioKB58sObxs2iRFfAPPQR/+IMPigswvTNWKRX0iouLWbhwISNHjiQ2NrZG265bB2lp8IMfwNtvgyMEUzEET0kp1dB88MEHnD59usZj5/fsgZQUuO46WLECoqJ8VGCAadArpYKe0+mkdevWDBo0qNrb5OZaUw47HNYPsC1C+G4fDXqlVFDLyclh5cqVjB8/nrBqPuqpsNB6BOCxY/D++9C5s4+LDDCdplgpFdQWLFiA2+2u9kyVHg9MmADr18OSJdCvn48LrAc06JVSQc3lctGnTx9uuOGGaq3/7LOwbBn89a/WXDYNgXbdKKWC1rZt29i0aVO1f4R95RUr4KdOhf/8Tx8XV49o0CulgpbT6SQ8PJyxY8dWue7778NPfgI//CH8/e/BO+VwbWjQK6WCktvtZu7cuQwbNoyq5svKyrLmsOndGxYsgGr+ZhsyNOiVUkHp008/5fjx41V22xw6BPfdBwkJ8MEHEBPjpwLrEf0xVikVlFwuF3FxcQwfPvyK65w5Y42VLyqCzz+Ha67xY4H1iF7RK6WCztmzZ1m+fDljx44lMjKy0nVKSmDUKNi7F5Yvh549/VxkPaJX9EqpoLNkyRKKioquOHbeGHj0UVi9GlwuuPtuPxdYz+gVvVIq6LhcLrp3784tt3xnAl0AnnsO5syB3/zGujmqodOgV0oFlQMHDrB27VrS0tIqfVzg229bAT9pEvziF34vr17SoFdKBZU5c+YgIowfP/473336KTz2GAwaBLNmNayx8lejQa+UChrljwscMGAA7S57ave2bdaUBj16wNKlEBERoCJrYN+pfeQV5/n8OBr0SqmgsW7dOg4cOPCdH2Gzs61hlDEx1pTDzZoFqMBqcHvcLN+5nMFzBtP1pa44v3T6/JhVjroRkXaAC2gFGGCWMSZdROKBRUAH4CCQaow5LVanWTowDDgPTDLGbPJN+UqphsTlchETE8OoUaMutOXnWzdEnToFa9fCZRf69UZ2Xjavb3yd1ze9zrG8Y7SNbctv7voND1zv+5nVqjO80g38P2PMJhFpCmwUkU+AScBnxpjnRWQ6MB34OTAU6Gq/bgUy7HellKq1wsJCFi9ezOjRo2nSpAkAbrf1nNevvoL33rOmOKhPjDF8/vXnZGRlsGLXCspMGUM6D+GVYa8wvNtwwh3+GeFenYeDfwN8Yy/nichO4FogBbjLXs0JrMEK+hTAZYwxwL9EpLmItLb3o5RStfLuu+9y7ty5C902xsBTT1ldNTNnWl039cXpwtO8veVtZm6cyZ6Te2gR3YL/7PefPJ78OF3iu/i9nhr9ORGRDkBvYD3QqkJ4H8fq2gHrj8CRCpsdtds06JVSteZ0OmnXrh133XUXAH/5ixXwzz4Ljz8e2NrAunr/d/a/ycjKYOG2hRS5i7it7W247nfxYNKDRIUH7oG01Q56EWkCLAN+aow5V3H8qjHGiIipyYFFZDIwGaB9+/Y12VQp1cBkZ2eTmZnJ9OnTcTgcLF5sBXxqKvzxj4GtraCkgAXbFpCRlcGmbzYRExFD2k1pPJn8JDddc1Ngi7NVK+hFJAIr5OcZY96xm78t75IRkdZAjt1+DKj4c0hbu+0SxphZwCyA5OTkGv2RUEo1LPPnz8fj8TBx4kS++AImToT+/cHptB7uHQg7c3eSkZWB60sXZ4vPckPiDbwy7BXGf288sZGxgSnqCqoz6kaAN4Gdxpi/VfjqPSANeN5+f7dC+1QRWYj1I+xZ7Z9XStWWMQan00m/fv1wOLqTkgLt28O770KUn3tDSspKWLFrBRlZGaw5uIZGYY0Y3XM0TyY/Sf92/Su9U7c+qM4VfX9gArBVRLbYbf+NFfCLReQR4BCQan/3EdbQyn1Ywysf9mrFSqkGZcuWLWzbto0//Wk2Q4dad7t+9BG0aOG/Gg6fPcysjbN4Y9MbfFvwLR2bd+T5gc/zcO+HSYxJ9F8htVSdUTfrgCv9mRpYyfoGmFLHupRSCrB+hI2IiGXp0vEcO2bNK9/FDwNXPMbDqn2ryMjK4MO9H2KMYXi34fxH8n8wpMsQHBI895vqNMVKqXqrtLSUefMWkJj4MVlZESxZArfd5ttj5hbkMnvzbF7b+Bpfn/maxJhEpvefzuS+k7mu+XW+PbiPaNArpeqtjz/+mBMnfgbcxl/+Ys1l4wvGGL448gUZWRks3bGUkrIS7rzuTv448I+MvH4kjcIa+ebAfqJBr5Sqt375y+PAMzz5ZBlPP+39J3qfKz7H3K/mMjNrJltzthIbGcvjfR/nieQn6JkQOo+k0qBXStVLCxbksWXLj+nYcRszZtzg1SmHvzz+JRlZGczbOo/8knx6X9ObWffN4kc3/oiYRqH39HANeqVUvbNxI0yaFAVsZu7cCMK9kFRF7iKW7lhKRlYG/zzyT6LCo3go6SGeTH6SW669pd4OjfQGDXqlVL1y6JA1GyWcoHv3Z7jtts/rtL/9p/bz2sbXmL15NicLT9I1vit/HfxXJvWaRHx0vFdqru806JVS9caZM9bkZAUFZZSUDOLRRx+u1ZW22+Pmwz0fkpGVwar9qwiTMFJ6pPBk8pMM6DggqIZGeoMGvVKqXigpgVGjYO9eePDBt1m4cBfjxo2r0T6+yfuGNza9waxNszh67ihtmrbhuTuf49E+j3Jt7LU+qrz+06BXSgXcoUPws5/B6tXw1lsefvnLXzN48GBat25d5bbGGFYfXH1hzne3x809ne5hxr0z+GH3H/ptzvf6TP8FlFIBYYwV7C+9ZD00BKyZKNu3X8ORI0d44YUXrrr9maIzOLc4ycjKYPfJ3cRFxTHt1mk83vdxurbo6oczCB4a9Eopv8rPB5cLXn4Zdu6Eli3h5z+HJ56wJitLS3MSGxtLSkpKpdtnZWeR8e8MFmxbQKG7kFuvvZW3U94mNSmV6IhoP59NcNCgV0r5xZ498Mor8PbbcO4c9O1rLT/00MVZKPPz81m2bBljx44lOvpiaJ8vPc/CbQvJyMogKzuLxhGNGf+98TyZ/CS9W9ez5wfWQxr0SimfKSuDlSutq/dVqyAiwnpYyNSpcOutfOcmqHfeeYeCggLS0tIA2HViFzOzZuL80smZojP0TOjJS0NfYsL3JtAsqlkAzig4adArpbzu1Cl46y149VU4cADatIHf/hYeewxatbrydi6Xi46dO5Idl80A5wBWH1xNhCOCB3o+wJPJT3J7+9tD+sYmX9GgV0p5zZdfWlfv8+ZBYSHccQc8/zzcf791NX81/7fz//jMfEaTCU14aOlDXNfsOv4w4A/8uPePadXkKn8dVJU06JVSdVJaCsuXWwG/di1ER8P48TBlCtx0lUemni89z9pDa1m1fxWZ+zPZnrsdbofka5P52R0/494u9xLm8P5EZg2RBr1SqlaOH4fXX4eZMyE7Gzp2hL/8BX78Y4iL++76xhi25mwlc38mq/avYu2htRSXFRMZFknPmJ40W9+Mbu5urM5c7f+TCXEa9EqpajMG1q+3rt4XL7au5ocMgVmz4N57IeyyC/Ccghw+PfDphav24/nHAUhKSOKxmx7DvcdN5uuZbN69mTZt2vDn+X8OwFmFPg16pVSViopg0SLr5qaNGyE2Fv7jP6xXt24X1yspK+GLw19cuGrffHwzAC2iW3BP53sY3Gkw3cK7seTNJcyePpu8vDz69evH7xf8ngceeICIqjryVa1UGfQiMhu4D8gxxtxgt8UDi4AOwEEg1RhzWqyfw9OxHg5+HphkjNnkm9KVUr52+DBkZFhdNCdPQs+e1kia8eOhaVOrO2b3iT0Xgn3NwTUUlBYQ7gjn++2+z+/u/h1DugyhV6terFm9hvRfpvPhhx8SFhZGamoq06ZN45Zbbgn0aYa86lzRvw28DLgqtE0HPjPGPC8i0+3PPweGAl3t161Ahv2ulAoS5VMTvPwyvPuu1ZaSYo19v/tuOFN0mlVff0bm/kwy92dy6OwhALrEd2FSr0kM7jyYuzvcTdPIppw/f565c+cyacYktm/fTkJCAr/4xS944oknaNOmTQDPsmGpMuiNMf8rIh0ua04B7rKXncAarKBPAVzGGAP8S0Sai0hrY8w33ipYKeUb+fkwZ44V8Dt2QIsW8Oyz8Njjbo6HbSBzfyb/M3sVG45twGM8xEbGMrDjQKb/YDqDOw+mU1ynC/s6cuQIv3/l97z++uucOnWKXr168dZbbzFmzBiiym+DVX5T2z76VhXC+zhQPsj1WuBIhfWO2m3fCXoRmQxMBmjfvn0ty1BK1VVlUxP8+fWDRN2witWHM+mz8DPOFp/FIQ5ubnMzv7j9FwzuPJhb2956ycyQxhi++OIL0tPTWb58OcYYRo4cyU9+8hNuv11vdAqkOv8Ya4wxImJqsd0sYBZAcnJyjbdXStXe5VMThDfOp//41ST0y+TL/FU8c2wvHIN2se14sOeDDO48mIGdBlb6RKbi4mIWLVpEeno6mzZtonnz5jz99NNMmTKF6667LgBnpy5X26D/trxLRkRaAzl2+zGgXYX12tptSql64PRpmD0bXnnVw9eFm2naexUdnsvkmOOf/MNTSuNvGnNXh7uYestUBnceTPcW3a94JX78+HFmzpzJzJkz+fbbb7n++uvJyMhgwoQJxMSE3gO2g1ltg/49IA143n5/t0L7VBFZiPUj7Fntn1cq8L78El7IyGbJpkxK22cSPuYTaHSCPKDzNb14qPPTDO48mP7t+hMZHnnVfWVlZZGens6iRYsoLS1l+PC3pXfxAAAPMUlEQVThTJs2jUGDBmn3TD1VneGVC7B+eG0pIkeBX2EF/GIReQQ4BKTaq3+ENbRyH9bwyod9ULNSqhrOnS/kTwvX4ly3imNRmdB6GwyHFpGtGNZ9KIM7D+aeTvdUax6Z0tJSli9fTnp6Ov/85z9p0qQJTzzxBE899RRdu+pDPuq76oy6GXuFrwZWsq4BptS1KKVUzRlj2J67naWbVzH3X5nsd/8vhBdB20Z0bXQ74/pN5P4bBvO9Vt+r9pX3yZMnef3113nllVc4evQonTp14sUXX+Thhx+mWTOdJjhY6J2xSgWx3ILcC1MMfLgrkxPFdk9pTk+ucz/BpDsG8/8euJOmUY1rtN9t27aRnp7O3LlzKSoqYuDAgbz66qsMGzaMsMvnOVD1nga9UkGkpKyE/zvyfxfmjtn0zSYMhrCSeMr2DCLq2BDG3noP06e1u2RqguooKyvjww8/JD09nc8//5yoqCgmTJjAT37yE2644QbfnJDyCw16peoxYwx7T+29cBfq6oOryS/JJ0zCaF12G1Hrf0PhtsF0a96Xp6aEXZiaoCbOnj3L7Nmzefnllzlw4ABt27bl+eef59FHH6VFixa+OTHlVxr0StUjRe4i9pzcw7acbfzj4D/IPJDJwTMHAegc15kBLSbw7T+HsGHR3WSXxFpTE7isqQlqOuBlz549vPTSS7z99tvk5+fTv39/nn/+eUaOHEl4uEZDKNH/NZUKgPJA356zne2529mRu4PtudvZd2ofHuMBoGmjpgzoOIBpfZ/l3ObBLJrZmffsqQl+/lN44gmo6f1Ixhg++eQT0tPT+eijj4iIiGDMmDFMmzaNvn37+uBMVX2gQa+UDxW7i9l9cjfbcy6G+eWBHiZhdG3RlRsSb+ChpIdISkiiZ0JPHKd7MCsjgl+9bU1N0KeP9RzWMWOgptPFFBQU4HK5eOmll9i5cyetWrXiueee4/HHH+eaa67x/omrekWDXikvKA/0Hbk7LlylVxboXeK7XAj0ngk9SUpIolOzbhw7HMmuXbDr37BqF/xtO2zYYD1n9cEH4amn4NZba949c+jQIV5++WXeeOMNzpw5Q9++fXG5XKSmphIZefUbo1To0KBXqgYqC/QduTvYd2ofZaYMuBjoSQlJpPZMJSkxiaSEJBLDunFwvx3ombBoF+zeDfv2WU9qKnfNNdC9O/zmN/DYY9bnmjDGsHbtWtLT01mxYgUiwqhRo5g2bRrf//739e7VBkiDXqlKFLuLrT703O1Wt8sJK9grBrpDHBcC/cGeD5KUmESPFj2JPt+dr/fagb4aXtsNu3ZZz1gtFx4OXbtagZ6SAj16WK/u3aF589rVXFRUxIIFC5gxYwZbtmwhPj6eZ555hilTptCuXbuqd6BClga9atAqBvqFPvSrBPronqOt7pamSXCiOwf2RrJrh3Vl/r59hV5UdHH/cXFWgA8dejHMe/SwHqTtrafmZWdnk5GRwWuvvUZubi5JSUnMmjWLcePG0bhxzW6UUqFJg141COWBXvEH0R25O9h7cu93Ar1nQk9G9xxNz4QkEknC/W03DuyJYvc/4d+7YM4u6xF75RwO6NDBCvCBAy8N9JYta96vXl3r168nPT2dJUuWUFZWxn333ce0adMYMGCAds+oS2jQq5BSUlZyybDFKwV657jOJCUm8cD1D9AtLomY8z0pye7O13uj2LUBMnfBjF2Ql3dx3zExVnjffvulYd6lS81HwdRWaWkpS5cuJT09nfXr19O0aVOmTp3K1KlT6dy5s3+KUEFHg14FpcsDvfxK/UqBPqrHKNpHJxF5NomiY93Zvzvqwg+iBw6Ax3Nx323bWgGelnZpoLdp47ur86rk5uYya9YsXn31VbKzs+nSpQszZsxg0qRJNK3prbCqwdGgV/VWYWkhOQU55BTkcOD0gUu6XSoL9J4JPbm/2ygSSCLidBL5h7qz/8sodu2C13bByZMX9x0ZCd26Qe/eMHbsxTDv1g2aNAnQCVfiyy+/ZMaMGcybN4/i4mIGDx7MrFmzGDp0KA6HI9DlqSChQa/8xu1xc+L8CXILci8E+CWv85d+zi/Jv2R7Qegc35mkhCSGdxpFs+Ik5ERPzn3dnf1rotm1Cz7ae+lQxcREK8AfeODSkS3XXQf1ZRJGj8fDmTNnyM3NJTc3lxMnTnD8+HEWLlzIP/7xDxo3bszDDz/MU089Rc+ePQNdrgpCGvSq1owxnC0+W3loV/I6VXgKw3cfDxwmYSTEJJAYk0jLqER6tehE08REYkwi0Z5EIkoTKTvVjjP7urPvH9Fs2AXvVnhuWViY1U/eowf88IeXBnpcnB//QWylpaWcOHGCEydOXAjviiF+edvJkycpKyv7zn7at2/PCy+8wKOPPkpcIE5EhQwNenWJit0lOQU55J6/wtW3/Sr1lFa6n6bhcTQLT6SJJBLt6UlX912ElyXiOJ8IBQm4zyVScjqR4pOJ5J+I49xZBzvPXXo1frnmza0AHzLk0jDv1AkaNfLRPwjW9AGXB/TVQvzMmTNX3Fd8fDwJCQkkJCTQrVs3+vfvT8uWLS+0JSQkXPjcpk0bnftdeYUGfYhze9ycPH/yymF9PofjeTl8m5/DifM5FLjzK91PuIkmqqwVjUoTCSu8Fs73JjYvgdKzVlgXn0qEAvt1viV5ZY3Iu2wfYWEQGwvNmlmv2Fi4JhFiu1zaVtnyNddY3TB1/THUGHNJN0lloX3558LCwsr/TcLDLwnoPn36VBrY5a/4+HidFVIFhE/+Xyci9wLpQBjwhjHmeV8cpyEq85SRV5JHToEV0IdO5nDkZA7HzuZw/FwOuQW5nCzK4XRpDufcORSYkyDf7S7BE4ajMBGTn4jJT4CCTheDupJXo4gYmsRWEsatoVmPq4d0+XLjxt4fteJ2uy8Ec3W6Sk6ePInb7a50XzExMRcCOjExkaSkpEoDu7ytWbNmOl5dBQWvB72IhAGvAPcAR4F/i8h7xpgd3j6WL3g8UFJidSGUll5cvvhuyC8qJr+4kIKiIgpKijhfUsT54iLOl1rLhaVFFLkvvhe5iyguu/gq8RRS4imyXqYItymi1BTh5uKrTC6+PI6LL8Ku0rdRGFchnK+HgjvhfCLRZYnEkEhsWCLNIxJpEZVIyybNaRbrsMK43dVDOja28rs4jTGUlpZSWlqK2+3+znL5e05OKdnZ7iuuV9k2l7fl5eVVGuCnT5++4j9HXFzchWDu0qUL/fr1qzSwy5ejo6O98P8gpeofX1zR3wLsM8YcABCRhUAK4PWgX7Q8h8Xvn6SorJAidzGlniKKy4op8RRTShElnmI7RItxU2yFqBTbAVqMR4opcxTicRRjworwOIqthylf9VVct6LDAE80eKKQsiikLLLCeyQOTySOsljCPC2J8EQS7YkgzNOIcBNJuCeCMNOIRiaSKE8sMaYxTaQxjT1RNHGEExleTFjYecLD8nE0zscRk4fIUdylBygrK8NtB2iZ203pyVK+PV5KttuN2+222kpLcdvBWma3V/xcvm15u8cYyq9nK17XXt5W13eAiLAw4uLiiI+Pp1NcHMmdOxN/883E221xcXEXluPj42kWG0tE+V8nU+G/aCpbzsuz5gG+2jqBXK7r52DdV13a/L1dXfbVuzf4+GY3XwT9tcCRCp+PArf64Dhs/ftofrdjLWD1TkiF96u2GWuonhjAgBipsK5YbZesS4U2x4XvLjkG5uI6gFwWghVfUIhQeFkb6KjoqygrgxMnrJdSoSQjIyiDvlpEZDIwGaxhZLUx9N7byDt3GJEwHAjiCMMhDhwSZrWJw3o5wqyX3YY4MCJWh7HDCm7KP9svqfjZ4bDaytdzOC79vsL6l29X3ocr9j4qtpUvX/iu4vbl35W3X7Z9WFgYjrAw693hICw8HHE4Lt5EU36Mqt5rsm592WdDXK7r52DdV13a/L1dbffVps131/EyMZX9p0RddihyG/CcMWaI/fm/AIwxf7zSNsnJySYrK8urdSilVKgTkY3GmOSq1vNFb8G/ga4i0lFEGgFjgPd8cByllFLV4PWuG2OMW0SmAquwfnqcbYzZ7u3jKKWUqh6f9NEbYz4CPvLFvpVSStWMDvRQSqkQp0GvlFIhToNeKaVCnAa9UkqFOA16pZQKcV6/YapWRYjkAodquXlLoKHdF6/n3DDoOTcMdTnn64wxCVWtVC+Cvi5EJKs6d4aFEj3nhkHPuWHwxzlr141SSoU4DXqllApxoRD0swJdQADoOTcMes4Ng8/POej76JVSSl1dKFzRK6WUuoqgDXoRmS0iOSKyLdC1+IuItBOR1SKyQ0S2i8i0QNfkayISJSIbRORL+5x/Heia/EFEwkRks4h8EOha/EFEDorIVhHZIiIN4uEUItJcRJaKyC4R2Wk/y8M3xwrWrhsRuQPIB1zGmBsCXY8/iEhroLUxZpOINAU2AvcHy4PXa0Osx3HFGGPyRSQCWAdMM8b8K8Cl+ZSIPA0kA7HGmPsCXY+vichBINkY02DG0IuIE1hrjHnDfnZHY2PMGV8cK2iv6I0x/wucCnQd/mSM+cYYs8lezgN2Yj2jN2QZS779McJ+BefVSTWJSFtgOPBGoGtRviEizYA7gDcBjDElvgp5COKgb+hEpAPQG1gf2Ep8z+7G2ALkAJ8YY0L9nP8OPAt4Al2IHxkgU0Q22s+TDnUdgVzgLbuL7g0RifHVwTTog5CINAGWAT81xpwLdD2+ZowpM8b0AtoCt4hIyHbVich9QI4xZmOga/GzHxhj+gBDgSl212woCwf6ABnGmN5AATDdVwfToA8ydj/1MmCeMeadQNfjT/Z/2q4G7g10LT7UHxhh91kvBAaIyNzAluR7xphj9nsOsBy4JbAV+dxR4GiF/zpdihX8PqFBH0TsHybfBHYaY/4W6Hr8QUQSRKS5vRwN3APsCmxVvmOM+S9jTFtjTAdgDPC5MWZ8gMvyKRGJsQcXYHdfDAZCejSdMeY4cEREuttNAwGfDarwyTNj/UFEFgB3AS1F5CjwK2PMm4Gtyuf6AxOArXafNcB/28/oDVWtAaeIhGFdmCw2xjSIIYcNSCtguXUdQzgw3xjzcWBL8oungHn2iJsDwMO+OlDQDq9USilVPdp1o5RSIU6DXimlQpwGvVJKhTgNeqWUCnEa9EopFeI06JVSKsRp0CulVIjToFdKqRD3/wEPxfTmOaSa/wAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x111b60fd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "m= range(1,7)\n",
    "fac = [np.math.factorial(i) for i in m] #fac means factorial#\n",
    "exponential = [np.e**i for i in m]\n",
    "polynomial = [i**3 for i in m]\n",
    "logarithimic = [np.log(i) for i in m]\n",
    "\n",
    "plt.plot(m,fac,'black',m,exponential,'blue',m,polynomial,'green',m,logarithimic,'red')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "根據上面的圖，我們可以看出$x \\rightarrow \\infty$ 時，$x! > e^x > x^3 > ln(x)$ ，想要證明的話，我們需要去極限去算（用洛必達法則）。<br>\n",
    "$\\begin{align*}\\lim_{x\\rightarrow \\infty}\\frac{e^x}{x^3} = \\infty \\end{align*}$ 可以看出，趨於無窮時，分子遠大於分母，反之同理。<br>\n",
    "我們可以用 `sympy` 來算一下這個例子："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "oo\n"
     ]
    }
   ],
   "source": [
    "import sympy\n",
    "import numpy as np\n",
    "x = sympy.Symbol('x',real = True)\n",
    "f = lambda x: np.e**x/x**3\n",
    "y = f(x)\n",
    "print(y.limit(x,oo))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "為了描述這種隨著輸入$x\\rightarrow \\infty$或$x \\rightarrow 0$時，函數的表現，我們如下定義大$O$記法：<br>\n",
    "若我們稱函數$f(x)$在$x\\rightarrow 0$時，時$O(g(x))$，則需要找到一個常數$C$，對於所有足夠小的$x$均有$|f(x)|<C|g(x)|$<br>\n",
    "若我們稱函數$f(x)$在$x\\rightarrow 0$時是$O（g(x))$,則需要找一個常數$C$，對於所有足夠大的$x$均有$|f(x)|<C|g(x)|$<br>\n",
    "大$O$記法之所以得此名稱，是因為函數的增長速率很多時候被稱為函數的階（**Order**）<br>\n",
    "下面舉一個例子：當$x\\rightarrow \\infty$時，$x\\sqrt{1+x^2}$是$O(x^2)$<br>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1140c0780>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x114233f28>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import sympy\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "x = sympy.Symbol('x',real = True)\n",
    "xvals = np.linspace(0,100,1000)\n",
    "f = x*sympy.sqrt(1+x**2)\n",
    "g = 2*x**2\n",
    "y1 = [f.evalf(subs = {x:xval}) for xval in xvals]\n",
    "y2 = [g.evalf(subs = {x:xval}) for xval in xvals]\n",
    "plt.plot(xvals[:10],y1[:10],'r',xvals[:10],y2[:10],'b')\n",
    "plt.show()\n",
    "plt.plot(xvals,y1,'r',xvals,y2,'b')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 導數\n",
    "\n",
    "### 割線（Secent Line）\n",
    "\n",
    "曲線的格線是指與弧線由兩個公共點的直線。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMMAAACFCAYAAADmfkzbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAE/FJREFUeJztnX+czVX+x58HpR+0xFgi65uwQ37EEMIKlWS/6edWG7b82FVpUVqbVks9KLYkSRItkooVErYMQqEG49eM/Chh/TaDNdKMue/94/3BuHOZa+bOvXdm3s/H4z7uvedz3Pt25vO67/M+533OcSKCYRhQLNIGGEa0YGIwDA8Tg2F4mBgMw8PEYBgeJgbD8DAxGIaHicEwPEwMhuFRItIGAJQvX16qVasWaTOMQsrq1asPiUhMTvWiQgzVqlUjISEh0mYYhRTn3I/B1LNukmF4mBiMAs9PP8H06Xn/HBODUaA5eBAeunknm343mOSkvGVgR0XMYBi5IXmTjw9/8xZTDv+Vy0v6KFH8QaBWrj/PPINRIFkxMZmj9Vsy+HBvfDc1p8TmTVAr90IAE4NR0EhPZ3WnF2nYrQG/ZjOHXp3EL1YsgBAMzecoBufcZc65b5xz65xzm5xzg73y/3POrXLObXXOfeScu9QrL+m93+Zdz7uVhgH4VqxiX+VGNJo9iBUV76ZYchLl+3UB50Ly+cF4hp+BNiJSH2gAtHfONQVeAUaKSA0gFejm1e8GpIrI9cBIr55h5J60NE717gvNm3HqUCpjbp9Di10fclWNX4b0a3IUgyjHvbeXeA8B2gAzvPJJQCfv9V3ee7zrbZ0LkXSNosfnn5MZewMl3nydcfyJT15K4vH5v6VEPgz9BBUzOOeKO+cSgQPAF8B24IiInPKq7AYqe68rA7sAvOtHgXIBPrOncy7BOZdw8ODBvP0vjMLH4cPQtSvcfjs79pakXcllVPrkLXoPvCpUvaJsBCUGEckUkQZAFaAJEBuomvccyNRsA8Ai8o6IxIlIXExMjmkjRlFBBD78EGJj8U39gBGXDqRtuURe+aoFnTrl/M/zwkU5GxE54pxbAjQFyjjnSni//lWAPV613cC1wG7nXAngF0BK6Ew2Ci27d0OvXjB3LnuvbUz7zIUUq1uPpbOhatX8//pgRpNinHNlvNeXA+2AZGAxcJ9XrSsw23s9x3uPd32R2OZMxoXw+eCtt6B2bSQ+ng/iXqXKrhXUvK8ey5eHRwgAiMgFH0A9YC2wHtgIDPLKrwO+AbYB04GSXvll3vtt3vXrcvqORo0aiVFESU4WadFCBORky3ZyT4PtAiKDB4v4fKH5CiBBcrgHRSTnbpKIrAduDFD+PRo/+JefBO6/eFkaRYqMDBg+HIYMgSuv5IdB79Hy3a6kHnHMmAH33ht+kyw3yQg/334L3brBhg1w//3MavMGD/WtSIUK8PXXUL9+ZMyydAwjfKSlwdNPQ9OmcPgwvpmzGFjjY+7uVZHGjVUjkRICmBiMcLFwIdStC6+9Bj16cGxlEvdMuouhQ6F7d71coUJkTbRukpG/pKSoN/jnP6FmTfjyS5JjWnH3rbBtG4waBb17hyy9KE+YZzDyBxH4+GOIjYUpU+Cvf4V16/jkcCuaNIHUVIiPh6eeig4hgInByA/+8x/o1Al+9zu49lpYvZrMF4fy3JDLuOceqF0bVq+G3/wm0oaei4nBCB0+H4wbp3f7F1/AiBGwciWHq9SnQwcYNgx69IClS6FKlUgbmx2LGYzQsGXL2Tu9TRt45x2oXp21a+Gee2DPHi3q0SPShp4f8wxG3sjI0J/8evVg/XqYMEGHhqpX5/33oXlzOHUKli2LbiGAicHICwkJ0LgxPPccdOwISUnw2GOkZzieego6d4abbtL4oEm2XIXow8RgXDwnTkD//nqnHzgAM2fCjBlQqRI7d0KrVjB6NPTpo6FDpOcPgsViBuPiiI+Hnj3h+++13zN8OJQpA8C8eeoNMjJ0U6/77svhs6IM8wxGcKSmaj5Ru3ZQrBgsXqwRcZkynDqlPaU77zwzklrghAAmBiMnRLQLFBsLkybBX/6igXLr1gDs3av6GDZM0ypWrIAaNSJrcm6xbpJxfvbsgSeegFmzoGFDmD8fbjybzb9oETz0EBw/rjrp0iWCtoYA8wxGdnw+GD9eJ88WLIBXXoFVq84IweeDF1+EW2+Fq6+Gb74p+EIA8wyGP1u3aoC8ZAnccovGBddff+bygQN64//73/DwwzrhXKpU5MwNJeYZDCUjQz1AvXqwdq16hvj4c4SwcKGuN1iyBN5+G95/v/AIAUwMBsCaNTpnMGAA3HGHTp51734mnTQjQy/ddhuULauLcP74x+jJNg0VJoaizIkTOjrUpIkOC/3rXzqBds01Z6p8/z20aKFOo3t3nXSuWzeCNucjFjMUVRYv1kmz7dv1Lh8+XH/2s/Dhh2c9wMcfw/2FfJsH8wxFjSNHVARt2uj7+HiND7IIIS0NHntMh03r1IHExMIvBDAxFC1mztTJs/feg2ef1cmz06LwSEyERo10lebAgZqRXVROJbZuUlFg71548kkVQ4MG8NlnOomWBZ8PRo7UtIpy5XTkyE8nhR7zDIUZEV1fULu2ZtG9/LLOkPkJYedOaNsWnnlGB5PWrSt6QgDzDIWXbdt08mzxYl1sPH58tqQhEfjgA824yMxU3Tz6aOEbMg0W8wyFjVOndO1x3bqaPjpunCYR+QkhNVUD5Ece0SB53ToNmouqEMA8Q+EiMVHTrNesgbvugjFjoHLlbNXi4/UckP374aWXdKohP07CKWiYZygM/PST7ksUF6fbtEyfDp98kk0IP/0EfftqynXp0rBypY4YmRAUa4aCzpdf6rzB1q3azxkxQlNJ/Vi9Wr3Bpk0aIwwfDldcEQF7oxjzDAWVI0d0erh1a41+Fy7UCNhPCOnp8Le/aepRaqouSXjzTRNCIMwzFERmzYLHH9dO/zPPwODBAe/uNWvgD3/Qnd+7dtV5BL+MCyML5hkKEvv2aV7E3XdDTIwuuBkxIpsQ0tNh0CDNvzt0CD79VGeUTQg5kNPRPuhhhYvRc9w2AX/2yq9Gj8Hd6j2X9cod8AZ6jNV6oGFO32HHWOWAzycycaJI2bIiJUuKDB0qkp4esOqaNSL16omASOfOIikpYbY1CiHIY6yCEUOl0zc0UBrYAtQGhgMDvPIBwCve6w7AfE8UTYFVOX2HieECbN8u0rat/qlathTZvDlgtZ9/Fhk0SKRECZGKFUXmzAmznVFMyMSQ7R/oqZ63At8BleSsYL7zXo8DHspS/0y98z1MDAHIyBD5xz9ELr9cpHRpkbFjRTIzA1ZdvVqkfn39az7yiMjhw2G2NcrJFzEA1YCdwFXAEb9rqd7zXKBFlvJ4IC7AZ/UEEoCEqlWrhqNNCg6JiSJxcfrn+e1vRXbtClgtLU2kf3+R4sXVG8yaFWY7CwjBiiHoANo5Vwr4F9BHRI5dqGqAsmznQIvIOyISJyJxMTExwZpRuDl5UmfB4uI0e+6jj2D27ID7t8fHa8bFiBE6vZCUpJPORu4JSgzOuUtQIUwVkZle8X7nXCXveiXggFe+Gw26T1MF2BMacwsxS5fqavuhQzVhKCkJHnggW7JQSoom07VrB8WLn93YzkaK8k6OYnDOOWACkCwir2W5NAfo6r3uisYSp8u7OKUpcFRE9obQ5sLFsWPQq5dmlqanw+ef6+KbcuXOqSaijiI2VneleO45Ta7zNrYzQkFO/SigBdrNWQ8keo8OQDk0HtjqPV8tZ4dWxwDbgQ0EiBf8H0U2gJ4zR6RyZZFixUT69RM5fjxgtZ07RTp21BCicWMNKYzgIb9Gk/LjUeTEsG+fyAMPaPPXrSuyalXAahkZIq+/LlKqlMgVV4iMHCly6lSYbS0EBCsGS8cIJyIwebKmjqalaf50//5w6aXZqq5cqb2nxERo3x7Gji06a5EjhaVjhIsffoDbb9dkodOraQYOzCaElBTNv2veHA4e1A2w580zIYQDE0N+k5mpGXI33KD7tY8Zo2nXv/71OdV8Po2ba9XS5NN+/SA5Ge69t2ivPgsn1k3KT9av1w26vv1WT/IYO1ZP8/BjwwZNQl2+HG6+WasV1l3rohnzDPnByZO6iKBRI9ixA6ZN09RRPyEcP64hw403qheYOFGnG0wIkcE8Q6hZvlxXnm3erHu3v/ZawDmDqVN1H6+9e7X6sGHZqhlhxjxDqDh2TNdTtmypi40XLNDjbPzu8IQE7Qp17qxZFitW6AyyCSHymBhCwWef6QjR2LF63uvGjTpylIX9+3XjiiZNdGfr997T4dOmTSNks5ENE0NeOHBANx/q2FGPf12xQkeOspzgkZ4Or74KNWvClCnw9NOwZYuOsBaz1o8qLGbIDSKaINSnj0bBQ4bo5kN+cwbz5+v82nffQYcOqpOaNSNks5Ej9tt0sezYoRuSdumicwVr1+rIURYhJCers+jQQecP5s7VnpQJIboxMQRLZiaMGqWTZ199BaNHw7Jluqmvx/79mkJRt65eGj5cw4c774yg3UbQWDcpGDZu1MmzVavUK7z9NlSteubyiRPaBXr5ZZ1i6NULXngBypePoM3GRWOe4UL8/LPe1Q0b6nFPU6dqf8cTgs+neXe1asHzz+uCm40b1WmYEAoe5hnOx9dfqzdITtaVZyNHnnOHL1qkI0OJibpKc+pUaNUqgvYaecY8gz///S/07q1HXKalacrolClnhLBhgwbHbdtqhunUqdp7MiEUfEwMWZk3TyfPxoxRQWzcqDECOlH2yCO6THn5co0PvvsOHn7Y5gsKC9ZNAl040KePHmNTu7aOFjVrBmju0Isv6sE3l1yi+UTPPhtwo2ujgFO0xXA6Y65PH80t+vvfYcAAKFmS1FQdGh01CjIyNJnu+efPOS/cKGQUXTH8+KOOgc6frwlC774LdeqQlgZvvKZCOHpUsy2GDIHq1SNtsJHfFL3ebmYmvPGGxgZLl+pP//LlnKxeh9Gj4frrdRuWFi10pGjqVBNCUaFoeYakJE0dXblSV9m//TYnf/krxr+lAfGePbp90YwZmmZtFC2KhmdIT9cDPRo00OOepkzh5Mx5vPnpr6heHZ56Sj3C4sWwZIkJoahS+D3DypU6ebZpEzz8MCdffp0Jc2IYVkPPAmzZUhNQW7e2hfdFncIrhuPHdSuW0aOhShXSZ85l/J47GdbsrAimTDERGGcpnGJYsEA3H9q1i/SeTzCu6lBefrI0e/ZoYDx5Mtxyi4nAOJfCJYZDh3Q1zfvvk1kzlkmPLaf/9OakpOjNP3kytGljIjACUzgCaBGdPY6NRT76iC+aDaLCf9bSbUJzbr5Zc+4WLdJ8IhOCcT4Kvhh27tTMud//nh+KVaehrKH9qsG0v6sk69fDnDlnMisM44IUXDH4fDBmDJmxdTj57yX0cyOpnfoVN3W7gS1bdLLMNuMyLoYCGTNIUjJH7utO2eSvWcht9L18HB0er8b2fpY7ZOSeAiWGk8fS2dTlFerOeQmflOLPZSZxzV8689UfnR3jZOSZAiGGQ4dg9nOraD6xO40yNzK/zIMcf2kUI3pUCHS0gWHkimDOdJvonDvgnNuYpexq59wXzrmt3nNZr9w5595wzm1zzq13zjXMi3FbtsCfu6cxrWJfHh3fjPKXHCHxpU9pnzKN+58wIRihJZgA+p9Ae7+yAUC8iNRAz3Mb4JXfAdTwHj2BsXkxbuQdn9N3wg30znydIw/2Imb/JhoM7GjDo0a+kKMYRGQpkOJXfBcwyXs9CeiUpXyyd5TWSqDM6eNxLxoRRpQeTJXqJWHZMq6eNgauuipXH2UYwZDbmOGX4h1nKyJ7nXMVvPLKwK4s9XZ7ZdmOvnXO9US9B1Wz7EGUpQKl5k3X9ZWXXZZLMw0jeEI9zxCoAyOBKorIOyISJyJxMTExgT/tmmtMCEbYyK0Y9p/u/njPB7zy3UDW42mqAHtyb55hhI/cimEO0NV73RWYnaW8izeq1BQ4ero7ZRjRjtMzoy9QwblpQGugPLAfeAGYBXwMVAV2AveLSIpzzgFvoqNPJ4BHRSQhRyOcOwj8eJ7L5YFDwfxnwkC02BItdkD02HIhO34lIufpi58lRzFEGudcgojERdoOiB5bosUOiB5bQmFHwU3UM4wQY2IwDI+CIIZ3Im1AFqLFlmixA6LHljzbEfUxg2GEi4LgGQwjLJgYDMMjasTgnNvhnNvgnEt0zmWbmwh1enge7GjtnDvqXU90zg3KDzu87yrjnJvhnNvsnEt2zjXzux6WNgnSlnxvF+dcrSyfn+icO+ac6+NXJ/dtIiJR8QB2AOUvcL0DMB/Nf2oKrIqQHa2BuWFqk0lAd+/1pUCZSLRJkLaErV287ysO7EMn1ELSJlHjGYIgdOnhBQDn3FVAK2ACgIiki8gRv2phaZMgbQk3bYHtIuKfuZDrNokmMQjwuXNutZfe7c/50sPDbQdAM+fcOufcfOdcnXywAeA64CDwnnNurXPuXefclX51wtUmwdgC4WmX0zwITAtQnus2iSYx3CwiDdHVck845/yPDAw6PTyf7ViDuub6wGg0Tys/KAE0BMaKyI1AGmdXFJ4mXG0SjC3hahecc5cC/w9MD3Q5QFlQbRI1YhCRPd7zAeAToIlflbCkh+dkh4gcE5Hj3ut5wCXOufw49Xk3sFtEVnnvZ6A3pH+dcKTM52hLGNsF9IdqjYjsP4+tuWqTqBCDc+5K51zp06+B24CNftXyPT08GDuccxW97Fycc03QNjwcSjsARGQfsMs5V8sragsk+VULS8p8MLaEq108HiJwFwny0ibhiv5zGBm4DljnPTYBA73yPwF/8l47YAywHdgAxEXIjie9a+uAlUDzfGyXBkACsB7tdpQNd5tchC1haRfgClRkv8hSFpI2sXQMw/CIim6SYUQDJgbD8DAxGIaHicEwPEwMhuFhYjAMDxODYXj8D5f4ts6Ozl9nAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6e233990>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from sympy.abc import x\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# function\n",
    "f = x**3-3*x-6\n",
    "# the tengent line at x=6\n",
    "line = 106*x-428\n",
    "\n",
    "\n",
    "d4 = np.linspace(5.9,6.1,100)\n",
    "domains = [d3]\n",
    "\n",
    "# define the plot funtion\n",
    "def makeplot(f,l,d):\n",
    "    plt.plot(d,[f.evalf(subs={x:xval}) for xval in d],'b',\\\n",
    "             d,[l.evalf(subs={x:xval}) for xval in d],'r')\n",
    "\n",
    "for i in range(len(domains)):\n",
    "    # draw the plot and the subplot\n",
    "    plt.subplot(2, 2, i+1)\n",
    "    makeplot(f,line,domains[i])\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 切線（Tangent Line）\n",
    "中學介紹導數的時候，通常會舉兩個例子，其中一個是幾何意義上的例子：對於函數關於某一點進行球道，得到的是函數在該點處切線的斜率。\n",
    "選中函數圖像中的某一點，然後不斷地將函數圖放大，當我們將鏡頭拉至足夠近後便會發現函數圖看起來像一條直線，這條直線就是切線。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6ec56910>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from sympy.abc import x\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# function\n",
    "f = x**3-2*x-6\n",
    "# the tengent line at x=6\n",
    "line = 106*x-438\n",
    "\n",
    "d1 = np.linspace(2,10,1000)\n",
    "d2 = np.linspace(4,8,1000)\n",
    "d3 = np.linspace(5,7,1000)\n",
    "d4 = np.linspace(5.9,6.1,100)\n",
    "domains = [d1,d2,d3,d4]\n",
    "\n",
    "# define the plot funtion\n",
    "def makeplot(f,l,d):\n",
    "    plt.plot(d,[f.evalf(subs={x:xval}) for xval in d],'b',\\\n",
    "             d,[l.evalf(subs={x:xval}) for xval in d],'r')\n",
    "\n",
    "for i in range(len(domains)):\n",
    "    # draw the plot and the subplot\n",
    "    plt.subplot(2, 2, i+1)\n",
    "    makeplot(f,line,domains[i])\n",
    "\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "另一個例子就是：對路程的時間函數 $s(t)$ 求導可以得到速度的時間函數 $v(t)$，再進一步求導可以得到加速度的時間函數 $a(t)$。這個比較好理解，因為函數真正關心的是：當我們稍稍改變一點函數的輸入值時，函數的輸出值有怎樣的變化。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 導數（Derivative）\n",
    "導數的定義如下：<br>\n",
    "定義一：<br>\n",
    "$\\begin{align*}f'(a) = \\frac{df}{dx}\\mid_{x=a} = \\lim_{x\\rightarrow 0} \\frac{f(x)-f(a)}{x-a}\\end{align*}$<br>\n",
    "若該極限不存在，則函數在 $x=a$ 處的導數也不存在。<br>\n",
    "定義二：<br>\n",
    "$\\begin{align*}f'(a) = \\frac{df}{dx}\\mid_{x=a} = \\lim_{h\\rightarrow 0} \\frac{f(a+h)-f(a)}{h}\\end{align*}$<br>\n",
    "以上两个定义都是耳熟能详的定义了，这里不多加赘述。\n",
    "<br>\n",
    "<br>\n",
    "**定義三**：\n",
    "函數$f(x)$在$x=a$處的導數$f'(a)$是滿足如下條件的常數$C$：<br>\n",
    "對於在$a$附近輸入值的微笑變化$h$有，$f(a+h)=f(a) + Ch + O(h^2)$ 始終成立，也就是說導數$C$是輸出值變化中一階項的係數。\n",
    "<br>\n",
    "$\\begin{align*} \\lim_{h\\rightarrow 0} \\frac{f(a+h)-f(a)}{h} = \\lim_{h\\rightarrow 0} C + O(h) = C \\end{align*}$ <br>\n",
    "下面具一個例子，求$cos(x)$在$x=a$處的導數：<br>\n",
    "$\\begin{align*} cos(a+h) &= cos(a)cos(h) - sin(a)sin(h)\\\\&=cos(a)(a+O(h^2)) - sin(a)(h+O(h^3))\\\\&=cos(a)-sin(a)h+O(h^2)\\end{align*}$<br>\n",
    "因此，$\\frac{d}{dx}cos(x)\\mid_{x=a} = -sin(a)$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "106.0001799942256\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from sympy.abc import x\n",
    "\n",
    "f = lambda x: x**3-2*x-6\n",
    "\n",
    "def derivative(f,h=0.00001):#define the 'derivative' function\n",
    "    return lambda x: float(f(x+h)-f(x))/h\n",
    "\n",
    "fprime = derivative(f)\n",
    "\n",
    "print (fprime(6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3*x**2 - 2\n",
      "106.000000000000\n"
     ]
    }
   ],
   "source": [
    "#use sympy's defult derivative function\n",
    "from sympy.abc import x\n",
    "f = x**3-2*x-6\n",
    "print(f.diff())\n",
    "print(f.diff().evalf(subs={x:6}))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 線性近似（Linear approximation）\n",
    "定義：就是用線性函數去對普通函數進行近似。依據導數的定義三，我們有：$f(a+h) = f(a) + f'(a)h + O(h^2)$ 如果，我們將高階項去掉，就獲得了$f(a+h)$的線性近似式了：$f(a+h) = \\approx f(a) + f'(a)h$ <br>\n",
    "舉個例子，用線性逼近去估算：<br>$\\begin{align*} \\sqrt{255} &= \\sqrt {256-1} \\approx \\sqrt{256} + \\frac{1}{2\\sqrt{256}(-1)} \\\\ &=16-\\frac{1}{32} \\\\ &=15 \\frac{31}{32} \\end{align*}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 牛頓迭代法（Newton's Method）\n",
    "**它是一種用於在實數域和複數域上近似求解方程的方法：使用函數$f(x)$的泰勒級數的前面幾項來尋找$f(X)=0$的根。**\n",
    "<br><br>\n",
    "首先，選擇一個接近函數$f(x)$零點的$x_0$，計算對應的函數值$f(x_0)$和切線的斜率$f'(x_0)$；<br>\n",
    "然後計算切線和$x$軸的交點$x_1$的$x$座標：$ 0 = （x_1 - x_0)\\cdot f'(x_0) + f(x_0)$；<br>\n",
    "通常來說，$x_1$ 會比 $x_0$ 更接近方程$f(X)=0$的解。因此， 我們現在會利用$x_1$去開始新一輪的迭代。公式如下：<br>\n",
    "$x_{n+1} = x_n - \\frac{f(x_n)}{f'(x_n)}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "After 1 iteration, the root value is updated to 1.5\n",
      "After 2 iteration, the root value is updated to 1.4166666666666665\n",
      "After 3 iteration, the root value is updated to 1.4142156862745097\n",
      "After 4 iteration, the root value is updated to 1.4142135623746899\n",
      "1.4142135623746899\n"
     ]
    }
   ],
   "source": [
    "from sympy.abc import x\n",
    "\n",
    "def mysqrt(c, x = 1, maxiter = 10, prt_step = False):\n",
    "    for i in range(maxiter):\n",
    "        x = 0.5*(x+ c/x)\n",
    "        if prt_step == True:\n",
    "            # 在输出时，{0}和{1}将被i+1和x所替代\n",
    "            print (\"After {0} iteration, the root value is updated to {1}\".format(i+1,x))\n",
    "    return x\n",
    "\n",
    "print (mysqrt(2,maxiter =4,prt_step = True))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我們可以通過畫圖，更加了解牛頓法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6ec56ff0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "f = lambda x: x**2-2*x-4\n",
    "l1 = lambda x: 2*x-8\n",
    "l2 = lambda x: 6*x-20\n",
    "\n",
    "x = np.linspace(0,5,100)\n",
    "\n",
    "plt.plot(x,f(x),'black')\n",
    "plt.plot(x[30:80],l1(x[30:80]),'blue', linestyle = '--')\n",
    "plt.plot(x[66:],l2(x[66:]),'blue', linestyle = '--')\n",
    "\n",
    "l = plt.axhline(y=0,xmin=0,xmax=1,color = 'black')\n",
    "l = plt.axvline(x=2,ymin=2.0/18,ymax=6.0/18, linestyle = '--')\n",
    "l = plt.axvline(x=4,ymin=6.0/18,ymax=10.0/18, linestyle = '--')\n",
    "\n",
    "plt.text(1.9,0.5,r\"$x_0$\", fontsize = 18)\n",
    "plt.text(3.9,-1.5,r\"$x_1$\", fontsize = 18)\n",
    "plt.text(3.1,1.3,r\"$x_2$\", fontsize = 18)\n",
    "\n",
    "\n",
    "plt.plot(2,0,marker = 'o', color = 'r' )\n",
    "plt.plot(2,-4,marker = 'o', color = 'r' )\n",
    "plt.plot(4,0,marker = 'o', color = 'r' )\n",
    "plt.plot(4,4,marker = 'o', color = 'r' )\n",
    "plt.plot(10.0/3,0,marker = 'o', color = 'r' )\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面舉一個例子，$f(x) = x^2 -2x -4 = 0$的解，從$x_0 = 4$ 的初始猜測值開始，找到$x_0$的切線：$y=2x-8$，找到與$x$軸的交點$(4,0)$，將此點更新為新解：$x_1 = 4$，如此循環。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "After 1 iteration, the solution is updated to 4\n",
      "After 2 iteration, the solution is updated to 10/3\n",
      "After 3 iteration, the solution is updated to 68/21\n",
      "After 4 iteration, the solution is updated to 3194/987\n",
      "3194/987\n"
     ]
    }
   ],
   "source": [
    "def NewTon(f, s = 1, maxiter = 100, prt_step = False):\n",
    "    for i in range(maxiter):\n",
    "        # 相较于f.evalf(subs={x:s}),subs()是更好的将值带入并计算的方法。\n",
    "        s = s - f.subs(x,s)/f.diff().subs(x,s)\n",
    "        if prt_step == True:\n",
    "            print(\"After {0} iteration, the solution is updated to {1}\".format(i+1,s))\n",
    "    return s\n",
    "\n",
    "from sympy.abc import x\n",
    "f = x**2-2*x-4\n",
    "print(NewTon(f, s = 2, maxiter = 4, prt_step = True))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "另外，我們可以使用`sympy`，它可以幫助我們運算"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1 + sqrt(5), -sqrt(5) + 1]\n"
     ]
    }
   ],
   "source": [
    "import sympy\n",
    "from sympy.abc import x\n",
    "f = x**2-2*x-4\n",
    "print(sympy.solve(f,x))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 優化\n",
    "### 高階導數（Higher Derivatives）\n",
    "\n",
    "在之前，我們講過什麼是高階導數，這裡在此提及，高階導數的遞歸式的定義為：函數$f(x)$的$n$階導數$f^{(n)}(x)$（或記為$\\frac{d^n}{dx^n}(f)$為：<br>\n",
    "$f^{(n)}(x) = \\frac{d}{dx}f^{(n-1}(x)$\n",
    "如果將求導$\\frac{d}{dx}$看作一個運算符，則相當於反覆對運算的結果使用$n$次運算符：$(\\frac{d}{dx})^n \\ f=\\frac{d^n}{dx^n}f$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2*y\n",
      "2*y\n",
      "2*(x - 1)\n"
     ]
    }
   ],
   "source": [
    "from sympy.abc import x\n",
    "from sympy.abc import y\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "f = x**2*y-2*x*y \n",
    "print(f.diff(x,2)) #the second derivatives of x\n",
    "print(f.diff(x).diff(x))# the different writing of the second derivatives of x\n",
    "print(f.diff(x,y)) # we first get the derivative of x , then get the derivative of y\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 优化问题（Optimization Problem）\n",
    "在微積分中，優化問題常常指的是算最大面積，最大體積等，現在給出一個例子："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6ec07930>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(1, figsize=(4,4))\n",
    "plt.axis('off')\n",
    "plt.axhspan(0,1,0.2,0.8,ec=\"none\")\n",
    "plt.axhspan(0.2,0.8,0,0.2,ec=\"none\")\n",
    "plt.axhspan(0.2,0.8,0.8,1,ec=\"none\")\n",
    "\n",
    "plt.axhline(0.2,0.2,0.8,linewidth = 2, color = 'black')\n",
    "plt.axhline(0.8,0.17,0.23,linewidth = 2, color = 'black')\n",
    "plt.axhline(1,0.17,0.23,linewidth = 2, color = 'black')\n",
    "\n",
    "plt.axvline(0.2,0.8,1,linewidth = 2, color = 'black')\n",
    "plt.axhline(0.8,0.17,0.23,linewidth = 2, color = 'black')\n",
    "plt.axhline(1,0.17,0.23,linewidth = 2, color = 'black')\n",
    "\n",
    "plt.text(0.495,0.22,r\"$l$\",fontsize = 18,color = \"black\")\n",
    "plt.text(0.1,0.9,r\"$\\frac{4-1}{2}$\",fontsize = 18,color = \"black\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "用一張給定邊長$4$的正方形紙來一個沒有蓋的紙盒，設這個紙盒的底部邊長為$l$，紙盒的高為$\\frac{4-l}{2}$，那麼紙盒的體積為：<br>\n",
    "$V(l) = l^2\\frac{4-l}{2}$\n",
    "我們會希望之道，怎麼樣得到$ max\\{V_1, V_2, \\dots V_n\\}$ ；優化問題就是在滿足條件下，使得目標函數（objective function）得到最大值（或最小）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6e6e30f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "l = np.linspace(0,4,100)\n",
    "V = lambda l: 0.5*l**2*(4-l) # the 'l' is the charcter 'l', not the number'one' as '1'\n",
    "plt.plot(l,V(l))\n",
    "plt.vlines(2.7,0,5, colors = \"c\", linestyles = \"dashed\")\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通過觀察可得，在$l$的值略大於$2.5$的位置（虛線），獲得最大體積。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 關鍵點（Critical Points）\n",
    "\n",
    "通過導數一節，我們知道一個函數在某一處的導數是代表了在輸入後函數值所發生的相對應的變化。<br>\n",
    "因此，如果在給定一個函數$f$，如果知道點$x=a$處函數的導數不為$0$，則在該點處稍微改變函數的輸入值，函數值會發生變化，這表明函數在該點的函數值，既不是局部最大值（local maximum），也不是局部最小值（local minimum）；相反，如果函數$f$在點$x=a$處函數的導數為$0$，或者該點出的導數不存在則稱這個點為關鍵點（critical Plints）<br><br>\n",
    "要想知道一個$f'(a)=0$的關鍵處，函數值$f(a)$是一個局部最大值還是局部最小值，可以使用二次導數測試：<br>\n",
    "1. 如果 $f''(a) > 0$, 則函數$f$在$a$處的函數值是局部最小值；\n",
    "2. 如果 $f''(a) < 0$, 則函數$f$在$a$處的函數值是局部最大值；\n",
    "3. 如果 $f''(a) = 0$, 則無結論。<br>\n",
    "二次函數測試在中學課本中，大多是要求不求甚解地記憶的規則，其實理解起來非常容易。二次導數測試中涉及到函數在某一點處的函數值、一次導數和二次導數，於是我們可以利用泰勒級數：$f(x)$在$x=a$的泰勒級數：<br>\n",
    "$f(x) = f(a) + f'(a)(x-a) + \\frac{1}{2}f''(a)(x-a)^2 + \\dots$<br>\n",
    "因為$a$是關鍵點，$f'(a)$ = 0, 因而：$f(x) = f(a) + \\frac{1}{2}f''(a)(x-a)^2 + O(x^3)$ 表明$f''(a) \\neq 0$時，函數$f(x)$在$x=a$附近的表現近似於二次函數，二次項的係數$\\frac{1}{2}f''(a)$決定了函數值在該點的表現。<br>\n",
    "回到剛才那題：求最大體積，現在，我們就可以求了：<br>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-0.5*l**2 + 1.0*l*(-l + 4)\n",
      "[0.0, 2.66666666666667]\n",
      "4\n",
      "-4\n"
     ]
    }
   ],
   "source": [
    "import sympy\n",
    "from sympy.abc import l\n",
    "V = 0.5*l**2*(4-l)\n",
    "# first derivative\n",
    "print(V.diff(l))\n",
    "# the domain of first derivative is (-oo,oo),so, the critical point is the root of V'(1) = 0\n",
    "cp = sympy.solve(V.diff(l),l)\n",
    "print(str(cp))\n",
    "#after finding out the critical point, we can calculate the second derivative\n",
    "for p in cp:\n",
    "    print(int(V.diff(l,2).subs(l,p)))\n",
    "# known that whenl=2.666..., we get the maximum V"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 線性迴歸（Linear Regression）\n",
    "二維平面上有$n$個數據點，$p_i = (x_i,y_i)$，現在嘗試找到一條經過原點的直線$y=ax$，使得所有數據點到該直線的殘差（數據點和回歸直線之間的水平距離）的平方和最小。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6e8efc30>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Set seed of random function to ensure reproducibility of simulation data\n",
    "np.random.seed(123)\n",
    "\n",
    "# Randomly generate some data with errors\n",
    "x = np.linspace(0,10,10)\n",
    "res = np.random.randint(-5,5,10)\n",
    "y = 3*x + res\n",
    "\n",
    "# Solve the coefficient of the regression line\n",
    "a = sum(x*y)/sum(x**2)\n",
    "\n",
    "# 绘图\n",
    "plt.plot(x,y,'o')\n",
    "plt.plot(x,a*x,'red')\n",
    "for i in range(len(x)):\n",
    "    plt.axvline(x[i],min((a*x[i]+5)/35.0,(y[i]+5)/35.0),\\\n",
    "         max((a*x[i]+5)/35.0,(y[i]+5)/35.0),linestyle = '--',\\\n",
    "         color = 'black')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "要找到這樣一條直線，實際上是一個優化問題：<br>\n",
    "$\\min_a Err(a) = \\sum_i(y_i - ax_i)^2$<br>\n",
    "要找出函數$Err(a)$的最小值，首先計算一次導函數：$\\frac{dErr}{da} = \\sum_i 2(y_i-ax_i)(-x_i)$，因此，$a = \\frac{\\sum_i x_iy_i}{\\sum_i x_i^2}$ 是能夠使得函數值最小的輸入。<br>\n",
    "這也是上面`python`代碼中，求解回歸線斜率所用的計算方式。\n",
    "<br><br>\n",
    "如果，我們不限定直線一定經過原點，即，$y=ax+b$，則變量變成兩個：$a$和$b$：<br>\n",
    "$\\min_a Err(a,b) = \\sum_i(y_i - ax_i-b)^2$<br>\n",
    "這個問題就是多元微積分中所要分析的問題了，這裡給出一種`python`中的解法：<br>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6e79cdb0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 设定好随机函数种子，确保模拟数据的可重现性\n",
    "np.random.seed(123)\n",
    "\n",
    "# 随机生成一些带误差的数据\n",
    "x = np.linspace(0,10,10)\n",
    "res = np.random.randint(-5,5,10)\n",
    "y = 3*x + res\n",
    "\n",
    "# 求解回归线的系数\n",
    "a = sum(x*y)/sum(x**2)\n",
    "\n",
    "slope, intercept = np.polyfit(x,y,1)\n",
    "\n",
    "# 绘图\n",
    "plt.plot(x,y,'o')\n",
    "plt.plot(x,a*x,'red',linestyle='--')\n",
    "plt.plot(x,slope*x+intercept, 'blue')\n",
    "for i in range(len(x)):\n",
    "    plt.axvline(x[i],min((a*x[i]+5)/35.0,(y[i]+5)/35.0),\\\n",
    "         max((a*x[i]+5)/35.0,(y[i]+5)/35.0),linestyle = '--',\\\n",
    "         color = 'black')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 積分與微分（Integration and Differentiation）\n",
    "\n",
    "### 積分\n",
    "\n",
    "積分時微積分中一個一個核心概念，通常會分為**定積分和不定積分**兩種。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 定積分（Integral）\n",
    "\n",
    "也被稱為**黎曼積分（Riemann integral）**，直觀地說，對於一個給定的正實數值函數$f(x)$,$f(x)$在一個實數區間$[a,b]$上的定積分：$\\int_a^b f(x) dx$ 可以理解成在$O-xy$坐標平面上，由曲線$（x,f(x))$，直線$x=a, x=b$以及$x$軸圍成的面積。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6eb64550>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(0, 5, 100)\n",
    "y =  np.sqrt(x)\n",
    "\n",
    "plt.plot(x, y)\n",
    "plt.fill_between(x, y, interpolate=True, color='b', alpha=0.5)\n",
    "plt.xlim(0,5)\n",
    "plt.ylim(0,5)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**黎曼積分**的核心思想就是試圖通過無限逼近來確定這個積分值。同時請注意，如果$f(x)$取負值，則相應的面積值$S$也取負值。這裡不給出詳細的證明和分析。不太嚴格的講，黎曼積分就是當分割的月來月“精細”的時候，黎曼河去想的極限。下面的圖就是展示，如何通過“矩形逼近”來證明。（這裡不提及勒貝格積分 Lebesgue integral）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6ed7fb30>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.ticker as ticker\n",
    "\n",
    "def func(x):\n",
    "    return -x**3 - x**2 + 5\n",
    "\n",
    "a, b = 2, 9  # integral limits\n",
    "x = np.linspace(-5, 5)\n",
    "y = func(x)\n",
    "ix = np.linspace(-5, 5,10)\n",
    "iy = func(ix)\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "plt.plot(x, y, 'r', linewidth=2, zorder=5)\n",
    "plt.bar(ix, iy, width=1.1, color='b', align='edge', ec='olive', ls='-', lw=2,zorder=5)\n",
    "\n",
    "plt.figtext(0.9, 0.05, '$x$')\n",
    "plt.figtext(0.1, 0.9, '$y$')\n",
    "\n",
    "ax.spines['left'].set_visible(True)\n",
    "ax.spines['right'].set_visible(True)\n",
    "ax.xaxis.set_major_locator(ticker.IndexLocator(base=1, offset=0))\n",
    "plt.xlim(-6,6)\n",
    "plt.ylim(-100,100)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6eed6f10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.ticker as ticker\n",
    "\n",
    "def func(x):\n",
    "    \n",
    "    return -x**3 - x**2 + 5\n",
    "\n",
    "a, b = 2, 9  # integral limits\n",
    "x = np.linspace(-5, 5)\n",
    "y = func(x)\n",
    "ix = np.linspace(-5, 5,20)\n",
    "iy = func(ix)\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "plt.plot(x, y, 'r', linewidth=2, zorder=5)\n",
    "\n",
    "plt.bar(ix, iy, width=1.1, color='b', align='edge',ec='olive', ls='-', lw=2,zorder=5)\n",
    "\n",
    "plt.figtext(0.9, 0.05, '$x$')\n",
    "plt.figtext(0.1, 0.9, '$y$')\n",
    "\n",
    "ax.spines['left'].set_visible(True)\n",
    "ax.spines['right'].set_visible(True)\n",
    "ax.xaxis.set_major_locator(ticker.IndexLocator(base=1, offset=0))\n",
    "plt.xlim(-6,6)\n",
    "plt.ylim(-100,100)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6ed61ed0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.ticker as ticker\n",
    "\n",
    "def func(x):\n",
    "    n = 10\n",
    "    return n / (n ** 2 + x ** 3)\n",
    "\n",
    "a, b = 2, 9  # integral limits\n",
    "x = np.linspace(0, 11)\n",
    "y = func(x)\n",
    "x2 = np.linspace(1, 12)\n",
    "y2 = func(x2-1)\n",
    "ix = np.linspace(1, 10, 10)\n",
    "iy = func(ix)\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "plt.plot(x, y, 'r', linewidth=2, zorder=15)\n",
    "plt.plot(x2, y2, 'g', linewidth=2, zorder=15)\n",
    "plt.bar(ix, iy, width=1, color='r', align='edge', ec='olive', ls='--', lw=2,zorder=10)\n",
    "plt.ylim(ymin=0)\n",
    "\n",
    "plt.figtext(0.9, 0.05, '$x$')\n",
    "plt.figtext(0.1, 0.9, '$y$')\n",
    "\n",
    "ax.spines['right'].set_visible(False)\n",
    "ax.spines['top'].set_visible(False)\n",
    "ax.xaxis.set_major_locator(ticker.IndexLocator(base=1, offset=1))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 不定積分（indefinite integral）\n",
    "\n",
    "如果，我們將求導看作一個高階函數，輸入進去的一個函數，求導後成為一個新的函數。那麼不定積分可以視作求導的「反函數」，$F'(x) = f(x)$ ，則$\\int f(x)dx = F(x) + C$，<br>\n",
    "寫成類似於反函數之間的複合的形式有：$\\int((\\frac{d}{dx}F(x))dx) = F(x) + C, \\ \\ C \\in R$\n",
    "<br>\n",
    "即，在微積分中，一個函數$f = f$的不定積分，也稱為**原函數**或**反函數**，是一個導數等於$ f=f $的函數$ f = F $，即，$f = F' = f$。不定積分和定積分之間的關係，由 <a href = \"https://zh.wikipedia.org/wiki/微积分基本定理\"> 微積分基本定理 </a> 確定。\n",
    "<br>\n",
    "$\\int f(x) dx = F(x) + C$ 其中$f = F$ 是 $f = f$的不定積分。這樣，許多函數的定積分的計算就可以簡便的通過求不定積分來進行了。\n",
    "<br>\n",
    "這裡介紹`python`中的實現方法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "t**3 - 3*t\n",
      "t**3 + exp(t)\n"
     ]
    }
   ],
   "source": [
    "print(a.integrate())\n",
    "print(sympy.integrate(sympy.E**t+3*t**2))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 常微分方程（Ordinary Differential Equations,ODE)\n",
    "<br>\n",
    "我們觀察一輛行駛的汽車，假設我們發現函數$a(t)$能夠很好地描述這輛汽車在各個時刻的加速度，因為對速度的時間函數(v-t)求導可以得到加速度的時間函數(a-t)，如果我們希望根據$a(t)$求出$v(t)$，很自然就會得出下面的方程：<br>\n",
    "$\\frac{dv}{dt}=a(t)$；如果我們能夠找到一個函數滿足：$\\frac{dv}{dt} = a(t)$，那麼$v(t)$就是上面房車的其中一個解，因為常數項求導的結果是$0$，那麼$\\forall C \\in R$，$v(t)+C$也都是這個方程的解，因此，常微分方程的解就是$set \\ = \\{v(t) + C\\}$ \n",
    "<br>\n",
    "<br>\n",
    "在得到這一系列的函數後，我們只需要知道任意一個時刻裡汽車行駛的速度，就可以解出常數項$C$，從而得到最終想要的一個速度時間函數。\n",
    "<br>\n",
    "<br>\n",
    "如果我們沿用「導數是函數在某一個位置的切線斜率」這一種解讀去看上面的方正，就像是我們知道了一個函數在各個位置的切線斜率，反過來曲球這個函數一樣。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x6ec982d0>]"
      ]
     },
     "execution_count": 115,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6ec4c390>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import sympy\n",
    "t = sympy.Symbol('t')\n",
    "c = sympy.Symbol('c')\n",
    "domain = np.linspace(-3,3,100)\n",
    "v = t**3-3*t-6\n",
    "a = v.diff()\n",
    "    \n",
    "for p in np.linspace(-2,2,20):\n",
    "    slope = a.subs(t,p)\n",
    "    intercept = sympy.solve(slope*p+c-v.subs(t,p),c)[0]\n",
    "    lindomain = np.linspace(p-1,p+1,20)\n",
    "    plt.plot(lindomain,slope*lindomain+intercept,'red',linewidth = 1)\n",
    "        \n",
    "plt.plot(domain,[v.subs(t,i) for i in domain],linewidth = 2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 旋轉體（Rotator）\n",
    "\n",
    "分割法是微積分中的第一步，簡單的講，就是講研究對象的一小部分座位單元，放大了仔細研究，找出特徵，然後在總結整體規律。普遍連說，有兩種分割方式：直角坐標系分割和極座標分割。\n",
    "\n",
    "### 直角坐標系分割\n",
    "\n",
    "對於直角坐標系分割，我們已經很熟悉了，上面講到的“矩陣逼近”其實就是沿著$x$軸分割成$n$段$\\{\\Delta x_i\\}$，即。在直角坐標系下分割，是按照自變量進行分割。<br>\n",
    "*當然，也可以沿著$y$軸進行分割。（勒貝格積分）*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 極坐標分割\n",
    "\n",
    "同樣的，極座標也是按照自變量進行分割。這是由函數的影射關係決定的，一直自變量，通過函數運算，就可以得到函數值。從圖形上看，這樣分割可以是的每個分割單元“不規則的邊”的數量最小，最好是只有一條。所以，在實際問題建模時，重要的是選取合適的坐標系。<br>\n",
    "[![Screen Shot 2018-06-13 at 12.20.11 AM.png](https://i.loli.net/2018/06/13/5b1ff2e2bbee6.png)](https://i.loli.net/2018/06/13/5b1ff2e2bbee6.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 近似\n",
    "\n",
    "近似，是微積分中重要的一部，通過近似將分割出來的不規則的“單元”近似成一個規則的”單元“。跟上面一樣，我們無法直接計算曲線圍成的面積，但是可以用一個**相似**的矩形去替代。\n",
    "<br>\n",
    "1. Riemann 的定義的例子：在待求解的是區間$[a, b]$上曲線與$x$軸圍成的面積，因此套用的是平面的面積公式：$S_i = h_i \\times w_i = f(\\xi) \\times \\Delta x_i$\n",
    "<br>\n",
    "2. 極坐標系曲線積分<br>\n",
    "待求解的是在區間$[\\theta_1, \\theta_2]$上曲線與原點圍成的面積，因此套用的圓弧面積公式：$S_i = \\frac{1}{2}\\times r_i^2 \\times \\Delta \\theta_i = \\frac{1}{2} \\times [f(\\xi_i)^2 \\times \\Delta \\theta_i$<br>\n",
    "3. 平面曲線長度<br>\n",
    "平面曲線在微觀上近似為一段“斜線”，那麼，它遵循的是“勾股定理”了，即“Pythagoras 定理”：$\\Delta l_i = \\sqrt{(\\Delta x_i)^2 + (\\Delta y_i)^2} = \\sqrt{1 + (\\frac{\\Delta y_i}{\\Delta x_i}^2 \\Delta x_i}$<br>\n",
    "4. 極坐標曲線長度<br>\n",
    "$dl = \\sqrt{(dx)^2 + (dy)^2 } = \\sqrt{ \\frac{d^2[r(\\theta)\\times cos(\\theta)]}{d\\theta^2} +  \\frac{d^2[r(\\theta)\\times sin(\\theta)]}{d\\theta^2} d\\theta } = \\sqrt{ r^2(\\theta) + r'^2(\\theta)}d\\theta$<br>\n",
    "我們不能直接用弧長公式，弧長公式的推導用了$\\pi$，而$\\pi$本身就是一個近似值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 求和\n",
    "\n",
    "前面幾步都是在微觀層面進行的，只有通過“求和”（Remann 和）才能回到宏觀層面：$\\lim_{\\lambda \\rightarrow 0^+}\\sum_{i = 0}^n F_i$ 其中，$F_i$ 表示各種圍觀單元的公式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "例題：求（lemniscate）$\\rho^2 = 2a^2 cos(2\\theta)$ 圍成的平民啊區域的面積。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6effa650>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "alpha = 1\n",
    "theta = np.linspace(0, 2*np.pi, num=1000)\n",
    "x = alpha * np.sqrt(2) * np.cos(theta) / (np.sin(theta)**2 + 1)\n",
    "y = alpha * np.sqrt(2) * np.cos(theta) * np.sin(theta) / (np.sin(theta)**2 + 1)\n",
    "plt.plot(x, y)\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "這是一個對稱圖形，只需要計算其中的四分之一區域面積即可"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2*a**2"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sympy import *\n",
    "\n",
    "t, a = symbols('t a')\n",
    "f = a ** 2 * cos(2 * t)\n",
    "4 * integrate(f, (t, 0, pi / 4))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
